2011-09-22 12 views
64

गुणों के रूप में मेवेन से कमांड लाइन तर्क पास करना pom.xml फ़ाइल में कमांड लाइन से गुणों को पास करना संभव है? उदाहरण के लिए मैं mvn ... argumentmom से pom.xml

और pom.xml में चलाने

<properties> 
    <myproperty> here should add argument from command line</myproperty> 
</properties> 

मदद के लिए धन्यवाद।

+0

सीधे नहीं हैं कि क्या आप के लिए, लेकिन [Maven पूछ रहे हैं प्रोफाइल] (http://maven.apache.org/guides/introduction/introduction-to-profiles.html) इस – Sig

+0

के लिए उपयोगी हो सकता है हाँ, मुझे प्रोफ़ाइल के बारे में पता है। मैं maven-soapui-plugin का उपयोग कर रहा हूं जहां में ... प्रोजेक्ट का निश्चित नाम है। मेरे पास लगभग 10 प्रोजेक्ट है और मैं प्रत्येक प्रोजेक्ट की नई प्रोफ़ाइल के लिए नहीं चाहता हूं। मैं mvn चलाने के लिए तर्क का उपयोग करना चाहता हूं ... प्रोजेक्ट 1 प्रोजेक्ट 1 और एमवीएन चलाने के लिए ... प्रोजेक्ट 2 प्रोजेक्ट 2 – hudi

उत्तर

83

अपनी संपत्ति उदाहरण के लिए कार्य करें: पूरी संपत्ति परिभाषा के आसपास

mvn install "-Dmyproperty=my property from command line" 

नोट उद्धरण। यदि आपकी संपत्ति में रिक्त स्थान हैं तो आपको उनकी आवश्यकता होगी।

+10

चलाने के लिए नोट करें, कि अगर आपके पास पोम में और कमांड लाइन दोनों में कोई संपत्ति है, तो कमांड लाइन लेता है पूर्वता। यह अतिरंजित डिफ़ॉल्ट प्रदान करने के लिए उपयोगी हो सकता है। –

11
pom.xml

<project> 

अंदर

.....

<profiles> 
    <profile> 
     <id>linux64</id> 
     <activation> 
      <activeByDefault>true</activeByDefault> 
     </activation> 
     <properties> 
      <build_os>linux</build_os> 
      <build_ws>gtk</build_ws> 
      <build_arch>x86_64</build_arch> 
     </properties> 
    </profile> 

    <profile> 
     <id>win64</id> 
     <activation> 
      <property> 
       <name>env</name> 
       <value>win64</value> 
      </property> 
     </activation> 
     <properties> 
      <build_os>win32</build_os> 
      <build_ws>win32</build_ws> 
      <build_arch>x86_64</build_arch> 
     </properties> 
    </profile> 
</profiles> 

.....

<plugin> 
    <groupId>org.eclipse.tycho</groupId> 
    <artifactId>target-platform-configuration</artifactId> 
    <version>${tycho.version}</version> 
    <configuration> 
     <environments> 
      <environment> 
       <os>${build_os}</os> 
       <ws>${build_ws}</ws> 
       <arch>${build_arch}</arch> 
      </environment> 
     </environments> 
    </configuration> 
</plugin> 

.....

इस में उदाहरण के लिए जब आप किसी भी तर्कके बिना पोम चलाते हैं 10 डिफ़ॉल्ट प्रोफाइल निष्पादित होगा।

जब mvn -Denv=win64 clean install

win64 प्रोफाइल के साथ मार डाला मार डाला जाएगा।

देखें http://maven.apache.org/guides/introduction/introduction-to-profiles.html

2

आप परियोजना फ़ाइलों के रूप में चर नाम दे सकते हैं। आप विन्यास प्लगइन में उदाहरण के लिए नीचे के रूप में केवल एक टैग दे: -

<projectFile>${projectName}</projectFile> 

तो कमांड लाइन पर आप इस परियोजना का नाम पैरामीटर के रूप में पारित कर सकते हैं: -

mvn [your-command] -DprojectName=[name of project] 
+0

मैं mvn कमांड में ब्राउज़र का नाम और पर्यावरण प्रदान करना चाहता हूं। अगर मैं प्रदान नहीं करता तो यह डिफ़ॉल्ट होगा। उसको कैसे करे? – paul

5

मैं इस को हल करने के प्लगइन गुण का इस्तेमाल किया ।

गुणों को पोम में परिभाषित किया गया है, और my.properties फ़ाइल में लिखा गया है, जहां उन्हें आपके जावा कोड से एक्सेस किया जा सकता है।

<configuration> 
    <outputFile>${project.build.testOutputDirectory}/my.properties</outputFile> 
</configuration> 

उपयोग outputDirectory यदि आप गुण आपके द्वारा सुलभ होना चाहते हैं:

मेरे मामले में यह परीक्षण कोड, इस गुण फ़ाइल का उपयोग करने की जरूरत है कि इतने पोम में गुण फ़ाइल Maven के testOutputDirectory को लिखा है एप्लिकेशन कोड:

<configuration> 
    <outputFile>${project.build.outputDirectory}/my.properties</outputFile> 
</configuration> 

एक संपूर्ण उदाहरण के लिए देख रहे लोगों के लिए (यह मुझे इस काम के पाने के लिए नगण्य का एक सा ले लिया के रूप में मैं समझ में नहीं आया कैसे गुण टैग के नामकरण उन्हें पोम फ़ाइल में कहीं और पुनः प्राप्त करने की क्षमता को प्रभावित), मेरा पोम एफ के रूप में दिखता है ollows:

<dependencies> 
    <dependency> 
     ... 
    </dependency> 
</dependencies> 

<properties> 
    <app.env>${app.env}</app.env> 
    <app.port>${app.port}</app.port> 
    <app.domain>${app.domain}</app.domain> 
</properties> 

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-surefire-plugin</artifactId> 
      <version>2.20</version> 
     </plugin> 
     <plugin> 
      <groupId>org.codehaus.mojo</groupId> 
      <artifactId>properties-maven-plugin</artifactId> 
      <version>1.0.0</version> 
      <executions> 
       <execution> 
        <phase>generate-resources</phase> 
        <goals> 
         <goal>write-project-properties</goal> 
        </goals> 
        <configuration> 
         <outputFile>${project.build.testOutputDirectory}/my.properties</outputFile> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 

    </plugins> 
</build> 

और कमांड लाइन पर:

mvn clean test -Dapp.env=LOCAL -Dapp.domain=localhost -Dapp.port=9901 

तो इन गुणों जावा कोड से पहुँचा जा सकता:

java.io.InputStream inputStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("my.properties"); 
java.util.Properties properties = new Properties(); 
properties.load(inputStream); 
appPort = properties.getProperty("app.port"); 
appDomain = properties.getProperty("app.domain"); 
संबंधित मुद्दे