मैं मावेन के pom.xml से शेल कमांड निष्पादित करना चाहता हूं


105

मैं मावेन के साथ लिनक्स शेल कमांड निष्पादित करना चाहता हूं। यहाँ मैं कोशिश की है:

<plugin>  
  <groupId>org.codehaus.mojo</groupId> 
  <artifactId>exec-maven-plugin</artifactId> 
  <version>1.1.1</version> 
  <executions>
    <execution>
      <goals>
        <goal>exec</goal> 
      </goals>
    </execution>
  </executions>
  <configuration>
    <executable>hostname</executable> 
  </configuration>
</plugin>

कृपया अपना प्रश्न साफ़ करें और अपने प्रश्न में pom.xml प्रारूपित करें। यह पठनीय नहीं है।
zengr

12
मेरा मतलब अशिष्ट होना नहीं है, लेकिन आपको वास्तव में यह जानने की जरूरत है कि सवाल कैसे पूछे जाएं, हम मानसिक नहीं हैं। तुमने क्या किया? तुम्हें क्या मिला? परिणाम की क्या उम्मीद है?
पास्कल थिवेंट

जवाबों:


148

यहाँ मेरे लिए क्या काम कर रहा है:

<plugin>
  <artifactId>exec-maven-plugin</artifactId>
  <groupId>org.codehaus.mojo</groupId>
  <executions>
    <execution><!-- Run our version calculation script -->
      <id>Version Calculation</id>
      <phase>generate-sources</phase>
      <goals>
        <goal>exec</goal>
      </goals>
      <configuration>
        <executable>${basedir}/scripts/calculate-version.sh</executable>
      </configuration>
    </execution>
  </executions>
</plugin>


11
मैं यह जोड़ना चाहता हूं कि यह प्लगइन के साथ (कम से कम) संस्करण 1.5.0 के साथ काम नहीं करता है, क्योंकि <configuration />इसके बाद का पालन करना चाहिए <executions />और इसमें नहीं रखा जाना चाहिए । मुझे इस सरल वाक्य रचना गलती को खोजने में काफी समय लगा। मावेन की त्रुटि आउटपुट वास्तव में सहायक नहीं है।
joergl

1
यदि हम स्क्रिप्ट को तैनाती चरण के बाद चलाना चाहते हैं तो हमें किस चरण या लक्ष्य की आवश्यकता है ??
लुसी

3
मावेन चरणों को यहाँ सूचीबद्ध किया गया है: maven.apache.org/guides/introduction/…
एड रान्डेल

2
<workingDirectory>${basedir}/scripts/</workingDirectory>कॉन्फ़िगरेशन ब्लॉक का उपयोग करने के बजाय, पूर्ण पथ देने के बजाय <executable>एक अच्छा विचार भी हो सकता है
akn

35

यहाँ समस्या यह है कि मुझे नहीं पता कि क्या अपेक्षित है । अपने वर्तमान सेटअप के साथ, कमांड लाइन पर प्लगइन को इनवॉइस करना बस काम करेगा:

$ मवन निष्पादन: निष्पादन
[जानकारी] परियोजनाओं के लिए स्कैनिंग ...
[जानकारी] ----------------------------------------------- -------------------------
[जानकारी] बिल्डिंग Q3491937
[जानकारी] कार्य-खंड: [निष्पादन: निष्पादन]
[जानकारी] ----------------------------------------------- -------------------------
[जानकारी] [निष्पादन: निष्पादन {निष्पादन: डिफ़ॉल्ट-क्ली}]
[जानकारी] लैपटॉप
[जानकारी] ----------------------------------------------- -------------------------
[जानकारी] निर्माण सफलता
[जानकारी] ----------------------------------------------- -------------------------
...

वैश्विक configurationका उपयोग किया जाता है, hostnameकमांड निष्पादित किया जाता है ( laptopमेरा होस्टनाम है)। दूसरे शब्दों में, प्लगइन उम्मीद के मुताबिक काम करता है।

अब, आप एक प्लगइन निष्पादित करने के लिए चाहते हैं, तो निर्माण के भाग के रूप , आप के लिए है के लिए बाध्य एक विशिष्ट चरण पर एक लक्ष्य। उदाहरण के लिए, इसे बांधने के लिए compile:

  <plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>exec-maven-plugin</artifactId>
    <version>1.1.1</version>
    <executions>
      <execution>
        <id>some-execution</id>
        <phase>compile</phase>
        <goals>
          <goal>exec</goal>
        </goals>
      </execution>
    </executions>
    <configuration>
      <executable>hostname</executable>
    </configuration>
  </plugin>

और तब:

$ मवन संकलन
[जानकारी] परियोजनाओं के लिए स्कैनिंग ...
[जानकारी] ----------------------------------------------- -------------------------
[जानकारी] बिल्डिंग Q3491937
[जानकारी] कार्य-खंड: [संकलन]
[जानकारी] ----------------------------------------------- -------------------------
[जानकारी] [संसाधन: संसाधन {निष्पादन: डिफ़ॉल्ट-संसाधन}]
[जानकारी] फ़िल्टर किए गए संसाधनों को कॉपी करने के लिए 'UTF-8' एन्कोडिंग का उपयोग करना।
[जानकारी] गैर मौजूदा रिसोर्सडायरेक्टरी / होम / पास्कल / प्रोजेक्ट्स / Q3491937 / src / main / रिसोर्स को छोड़ें
[जानकारी] [संकलक: संकलन {निष्पादन: डिफ़ॉल्ट-संकलन}]
[जानकारी] संकलित करने के लिए कुछ भी नहीं - सभी कक्षाएं अप टू डेट हैं
[जानकारी] [निष्पादन: निष्पादन {निष्पादन: कुछ-निष्पादन}]
[जानकारी] लैपटॉप
[जानकारी] ----------------------------------------------- -------------------------
[जानकारी] निर्माण सफलता
[जानकारी] ----------------------------------------------- -------------------------
...

ध्यान दें कि आप configurationअंदर एक निर्दिष्ट कर सकते हैं execution


[त्रुटि] निर्माण त्रुटि [जानकारी] ------------------------------------------ ------------------------------ [जानकारी] एक या एक से अधिक आवश्यक प्लगइन पैरामीटर 'निष्पादन: निष्पादन' [] के लिए अमान्य / अनुपलब्ध हैं 0] प्लग-इन-मावेन-प्लगइन के लिए परिभाषा के अंदर निम्नलिखित निर्दिष्ट करें: <कॉन्फ़िगरेशन> ... <निष्पादन योग्य> VALUE </ निष्पादन योग्य> </ कॉन्फ़िगरेशन> -OR- कमांड लाइन पर, निर्दिष्ट करें: '-Dexec। निष्पादन योग्य = सही 'मुझे अब यह त्रुटि मिलती है।
नरेशकुमार

2
@ gnash-85: मुझे अभी भी पता नहीं है कि आप क्या कर रहे हैं। मैंने आपके द्वारा दिए गए सटीक स्निपेट का उपयोग किया था और ऊपर दिखाए गए अनुसार कोई समस्या नहीं थी। कृपया अपने प्रश्न को अपडेट करें कि आपने मावेन को कैसे आमंत्रित किया (और यदि आपने कुछ बदला है तो आपका वर्तमान कॉन्फ़िगरेशन क्या है)।
पास्कल थिवेन्ट

मैंने एक ही कोड चाइल्ड मॉड्यूल में रखा है। और मैं mvan को निष्पादित करने की कोशिश कर रहा हूं: मूल pom.xml से निष्पादित करें। और मुझे यह त्रुटि मिलती है। लेकिन जब मैं इसे व्यक्तिगत रूप से निष्पादित करता हूं तो यह काम कर रहा है।
नरेशकुमार

5
@ gnash-85: यह सामान्य है। जब आप mvn exec:execअभिभावक को आमंत्रित करते हैं , तो mvan इसे मूल-मॉड्यूल सहित बहु-मॉड्यूल बिल्ड की सभी परियोजनाओं पर चलाएगा। लेकिन पैरेंट पोम में प्लगइन के लिए कोई कॉन्फ़िगरेशन नहीं है जो executableपरिभाषित करने की अपेक्षा करता है, इसलिए त्रुटि संदेश।
पास्कल थिवेंट

2
इस भ्रम में जोड़ना। यदि आप अपने ब्लॉक के configurationअंदर निर्दिष्ट करते हैं execution, तो यह काम करेगा यदि एक समूह के भाग के रूप में चलाया जाए ( mvn install), लेकिन specify the following: <configuration>यदि सीधे साथ चलाया जाता है तो त्रुटि को फेंक दें mvn exec:exec
roo2

19

हल किया। समस्या यह है, निष्पादन योग्य लिनक्स में एक अलग तरीके से काम कर रहा है। यदि आप .sh फ़ाइल चलाना चाहते हैं, तो आपको नीचे दिए गए तरीके से लिखना चाहिए। इसे pom.xml में लिखें

    <plugin>
        <artifactId>exec-maven-plugin</artifactId>
    <version>1.6.0</version>
        <groupId>org.codehaus.mojo</groupId>
        <executions>
            <execution><!-- Run our version calculation script -->
                <id>Renaming build artifacts</id>
                <phase>package</phase>
                <goals>
                    <goal>exec</goal>
                </goals>
                <configuration>
                    <executable>bash</executable>
            <commandlineArgs>handleResultJars.sh</commandlineArgs>
                </configuration>
            </execution>
        </executions>
    </plugin>

2
धन्यवाद! मेरे लिए एक विंडोज़ उपयोगकर्ता के रूप में जो शेल स्क्रिप्ट को पसंद करता है, वह कुंजी थी!
रुइक

6

2 विकल्प:

  1. आप किसी भी चरण के लिए बंधन के बिना मावेन से एक कमांड निष्पादित करना चाहते हैं, आप बस कमांड टाइप करें और मावेन इसे चलाता है , आप बस कुछ चलाने के लिए मावेन करना चाहते हैं, आप परवाह नहीं करते हैं यदि हम संकलन / पैकेज / ... में हैं मैं npm startमावेन के साथ चलना चाहता हूं , आप इसे नीचे से प्राप्त कर सकते हैं:

mvn exec:exec -Pstart-node

उसके लिए आपको नीचे मावेन अनुभाग की आवश्यकता है

  <profiles>
    <profile>
      <id>start-node</id>
      <build>
        <plugins>
          <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>exec-maven-plugin</artifactId>
            <version>1.3.2</version>
            <executions>
              <execution>
                <goals>
                  <goal>exec</goal>
                </goals>
              </execution>
            </executions>
            <configuration>
              <executable>npm</executable>
              <arguments><argument>start</argument></arguments>
            </configuration>
          </plugin>
        </plugins>
      </build>
    </profile>

  </profiles>
  1. जब आप एक विशिष्ट चरण में होते हैं, तो आप मावेन से एक मनमाना कमांड चलाना चाहते हैं , उदाहरण के लिए जब मैं स्थापित चरण पर होता हूं तो मैं चाहता हूं कि npm installआप इसे कर सकते हैं:

mvn install

और उस काम के लिए आपको निम्न अनुभाग की आवश्यकता होगी:

  <plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>exec-maven-plugin</artifactId>
    <version>1.3.2</version>
    <executions>

      <execution>
        <id>npm install (initialize)</id>
        <goals>
          <goal>exec</goal>
        </goals>
        <phase>initialize</phase>
        <configuration>
          <executable>npm</executable>
          <arguments>
            <argument>install</argument>
          </arguments>
        </configuration>
      </execution>

1

धन्यवाद! तोमर बेन डेविड। इसने मेरी मदद की। के रूप में मैं डेमो फ़ोल्डर में पाइप स्थापित कर रहा हूँ जैसा कि आप npm स्थापित उल्लेख किया है

<groupId>org.codehaus.mojo</groupId>
            <artifactId>exec-maven-plugin</artifactId>
            <version>1.3.2</version>
            <executions>
              <execution>
                <goals>
                  <goal>exec</goal>
                </goals>
              </execution>
            </executions>
            <configuration>
              <executable>pip</executable>
              <arguments><argument>install</argument></arguments>                            
             <workingDirectory>${project.build.directory}/Demo</workingDirectory>
            </configuration>
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.