मैं मावेन का उपयोग करके किसी प्रोग्राम को कैसे निष्पादित कर सकता हूं?


120

मैं एक जाव वर्ग के निष्पादन के लिए एक मावेन लक्ष्य को ट्रिगर करना चाहूंगा। मैं Makefileलाइनों के साथ पलायन करने की कोशिश कर रहा हूँ :

neotest:
    mvn exec:java -Dexec.mainClass="org.dhappy.test.NeoTraverse"

और मैं वर्तमान में mvn neotestक्या करना चाहता हूं make neotest

न तो निष्पादन प्लगइन प्रलेखन और न ही मावेन चींटी कार्यों के पृष्ठों में किसी भी प्रकार का सीधा उदाहरण था।

वर्तमान में, मैं यहां हूं:

<plugin>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>exec-maven-plugin</artifactId>
  <version>1.1</version>
  <executions><execution>
    <goals><goal>java</goal></goals>
  </execution></executions>
  <configuration>
    <mainClass>org.dhappy.test.NeoTraverse</mainClass>
  </configuration>
</plugin>

मैं नहीं जानता कि कमांड लाइन से प्लगइन को कैसे ट्रिगर किया जाए, हालांकि।

जवाबों:


149

साथ वैश्विक विन्यास है कि आप कार्यकारी-maven-प्लगइन के लिए परिभाषित किया है:

<plugin>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>exec-maven-plugin</artifactId>
  <version>1.4.0</version>
  <configuration>
    <mainClass>org.dhappy.test.NeoTraverse</mainClass>
  </configuration>
</plugin>

mvn exec:javaकमांड लाइन पर इनवॉइस करने से वह प्लगइन आ जाएगा जो क्लास को निष्पादित करने के लिए कॉन्फ़िगर किया गया है org.dhappy.test.NeoTraverse

इसलिए, कमांड लाइन से प्लगइन को ट्रिगर करने के लिए, बस चलाएं:

mvn exec:java

अब, यदि आप exec:javaअपने मानक बिल्ड के भाग के रूप में लक्ष्य को निष्पादित करना चाहते हैं, तो आपको लक्ष्य को डिफ़ॉल्ट जीवनचक्र के एक विशेष चरण में बांधने की आवश्यकता होगी । ऐसा करने के लिए, उस लक्ष्य को घोषित करें जिसे आप लक्ष्य को तत्व में बांधना चाहते हैं :phaseexecution

<plugin>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>exec-maven-plugin</artifactId>
  <version>1.4</version>
  <executions>
    <execution>
      <id>my-execution</id>
      <phase>package</phase>
      <goals>
        <goal>java</goal>
      </goals>
    </execution>
  </executions>
  <configuration>
    <mainClass>org.dhappy.test.NeoTraverse</mainClass>
  </configuration>
</plugin>

इस उदाहरण के साथ, आपकी कक्षा को packageचरण के दौरान निष्पादित किया जाएगा । यह सिर्फ एक उदाहरण है, इसे अपनी आवश्यकताओं के अनुरूप ढालें। प्लगइन संस्करण 1.1 के साथ भी काम करता है।


1
मैं पहली बार उलझन में था: exec:javaस्काला और क्लोजर कोड के लिए भी इस्तेमाल किया जा सकता है, इसमें जावा कोड प्रति एसई होना जरूरी नहीं है।
19

8
संस्करण 1.4.0 होना चाहिए
Walery Strauch

मेरे लिए काम किया! धन्यवाद!
mrddr

25

कई कार्यक्रमों को निष्पादित करने के लिए, मुझे एक profilesअनुभाग की भी आवश्यकता है :

<profiles>
  <profile>
    <id>traverse</id>
    <activation>
      <property>
        <name>traverse</name>
      </property>
    </activation>
    <build>
      <plugins>
        <plugin>
          <groupId>org.codehaus.mojo</groupId>
          <artifactId>exec-maven-plugin</artifactId>
          <configuration>
            <executable>java</executable>
            <arguments>
              <argument>-classpath</argument>
              <argument>org.dhappy.test.NeoTraverse</argument>
            </arguments>
          </configuration>
        </plugin>
      </plugins>
    </build>
  </profile>
</profiles>

यह तब के रूप में निष्पादन योग्य है:

mvn exec:exec -Dtraverse

1
उस <argument>-classpath</argument><classpath />लाइन के साथ क्या हो रहा है ? मुझे नहीं लगता कि यह सही है।
ग्रीनजाइंट

1
हाँ, सबसे अधिक संभावना <classpath />टैग गलती से वहाँ मिल गया और इसे हटा दिया जाना चाहिए। तो वह रेखा सिर्फ <argument>-classpath</argument>
दिखेगी

7
यह कोई गलती नहीं है। यह संकेत दे रहा है कि pom.xml में निर्दिष्ट निर्भरताएँ वर्ग पथ के हिस्से के रूप में उपयोग की जानी चाहिए।
user924272
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.