2013-02-21 15 views
11

मेरे पास मेवेन के निर्माण और चलाने के लिए कॉन्फ़िगर किया गया एक प्रोजेक्ट है। यह परियोजना मंच विशिष्ट देशी पुस्तकालयों पर निर्भर करती है, और मैं उन निर्भरताओं को प्रबंधित करने के लिए here प्राप्त रणनीति का उपयोग कर रहा हूं।मेवेन 'exec: exec' के साथ तर्क

अनिवार्य रूप से, .dll या .so किसी विशेष प्लेटफ़ॉर्म के लिए फ़ाइलों को एक जार में पैक किया जाता है, और लक्षित प्लेटफार्म की पहचान करने वाले क्लासिफायर के साथ मेवेन सर्वर पर धक्का दिया जाता है। मेवेन-निर्भरता-प्लगइन तब मंच विशिष्ट जार को अनपैक करता है, और देशी पुस्तकालयों को लक्षित फ़ोल्डर में कॉपी करता है।

आम तौर पर मैं जावा प्रोग्राम चलाने के लिए mvn exec:java का उपयोग करता हूं, लेकिन exec:java उसी जेवीएम में मैवेन के रूप में अनुप्रयोग चलाता है, जो मुझे क्लासपाथ को संशोधित करने से रोकता है। चूंकि देशी निर्भरताओं को कक्षापथ में जोड़ा जाना चाहिए, इसलिए मुझे इसके बजाय mvn exec:exec का उपयोग करने के लिए मजबूर होना पड़ता है। इस पोम के प्रासंगिक टुकड़ा है:

... 
<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>exec-maven-plugin</artifactId> 
    <version>1.2.1</version> 
    <configuration> 
     <executable>java</executable> 
     <arguments> 
      <argument>-Djava.library.path=target/lib</argument> 
      <argument>-classpath</argument> 
      <classpath /> 
      <argument>com.example.app.MainClass</argument> 
     </arguments> 
    </configuration> 
</plugin> 
... 

इस आवेदन के डिफ़ॉल्ट विन्यास के लिए ठीक काम करता है, लेकिन मैं आदेश पंक्ति पर कुछ वैकल्पिक पैरामीटर निर्दिष्ट करने के लिए सक्षम होना चाहते हैं। आदर्श रूप में, मैं इस तरह कुछ करने के लिए करना चाहते हैं:

mvn exec:exec -Dexec.args="-a <an argument> -b <another argument>" 

दुर्भाग्य से, exec.args चर निर्दिष्ट करने पोम (जो classpath की स्थापना की और एप्लिकेशन को चलाने के लिए आवश्यक हैं) में तर्क मैं अधिलेखित कर देता है। क्या इसके चारों ओर एक रास्ता है? मेरे पास पोम में जो कुछ है उसे ओवरराइट किए बिना कमांड लाइन पर कुछ वैकल्पिक तर्क निर्दिष्ट करने का सबसे अच्छा तरीका क्या है?

उत्तर

34

मैवेन पर्यावरण चर का उपयोग करके मेरी समस्या का एक उचित रूप से सुरुचिपूर्ण समाधान ढूंढने में कामयाब रहा।

मूलभूत मूल्यों पोम में गुण के रूप में परिभाषित कर रहे हैं, और तर्क के रूप में कार्यकारी प्लगइन करने के लिए कहा:

... 
<properties> 
    <argumentA>defaultA</argumentA> 
    <argumentB>defaultB</argumentB> 
</properties> 
... 
<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>exec-maven-plugin</artifactId> 
    <version>1.2.1</version> 
    <configuration> 
     <executable>java</executable> 
     <arguments> 
      <argument>-Djava.library.path=${project.build.directory}/lib</argument> 
      <argument>-classpath</argument> 
      <classpath /> 
      <argument>com.example.app.MainClass</argument> 
      <argument>-a</argument> 
      <argument>${argumentA}</argument> 
      <argument>-b</argument> 
      <argument>${argumentB}</argument> 
     </arguments> 
    </configuration> 
</plugin> 
... 

अब मैं डिफ़ॉल्ट पैरामीटर के साथ वास्तव में चला सकते हैं के रूप में मैंने किया था से पहले:

mvn exec:exec 

और मैं कमांड लाइन पर प्रत्येक तर्क के लिए डिफ़ॉल्ट रूप से ओवरराइड कर सकता हूं:

mvn exec:exec -DargumentA=alternateA -DargumentB=alternateB 
+2

और कैसे वें जावा कोड में ese तर्कों का उपयोग किया जा सकता है, मेरा मतलब यह है कि: 'स्ट्रिंग [] args'? – zygimantus

+2

@zygimantus आप चाहते हैं 'mvn exec: java -Dexec.mainClass = "path.to.your.class" -Dexec.args = "arg1 arg2" जो मूल प्रश्न के दायरे से बाहर है। – dr0i

संबंधित मुद्दे