Pom.xml में गुण के रूप में मावेन से कमांड लाइन तर्क पारित करना


98

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

और pom.xml में

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

सहायता के लिए धनयवाद।


सीधे नहीं, जो आप पूछ रहे हैं, लेकिन मावेन प्रोफाइल इसके लिए उपयोगी हो सकती है
सिग

हाँ, मैं प्रोफाइल के बारे में जानता हूँ। मैं मावेन-साबुनुई-प्लगइन का उपयोग कर रहा हूं, जहां <प्रोजेक्टफाइल> ... </ प्रोजेक्टफाइल> प्रोजेक्ट का निश्चित नाम है। मेरे पास लगभग 10 प्रोजेक्ट हैं और मैं हर प्रोजेक्ट के लिए नया प्रोफाइल नहीं बनाना चाहता। मैं mvan चलाने के लिए तर्क का उपयोग करना चाहता हूँ ... Project1 को चलाने के लिए project1 और mvan ... Project2 को चलाने के लिए project2
hudi

जवाबों:


132

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

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

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


18
यह भी ध्यान दें, कि यदि आपके पास pom में एक संपत्ति है, और कमांड-लाइन पर, कमांड-लाइन पूर्वता लेता है। यह असाध्य चूक प्रदान करने के लिए उपयोगी हो सकता है।
डैन कार्टर

2
हम इस तरह से कई तर्क भी पारित कर सकते हैं, कुछ इस तरह से:mvn clean install "-Dprop1=value1" "-Dprop2=value2"
सुमित

14

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>

.....

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

जब साथ अंजाम दिया गया mvn -Denv=win64 clean install

win64 प्रोफ़ाइल निष्पादित किया जाएगा।

कृपया http://maven.apache.org/guides/introduction/introduction-to-profiles.html देखें


किस प्रोफ़ाइल का उपयोग करने के बाद से, यह साफ होना चाहिए?
sendon1982

14

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

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

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

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

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

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

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

<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");

जावा में मेरी संपत्ति फ़ाइल $ {app.env} के समान मूल्य दे रही है यह इसे मावेन कमांड लाइन से नहीं उठा रहा है, क्या संपत्ति का नाम इस तरह मूल्य के बराबर होना चाहिए? <app.env> $ {app.env} </ app.env>
सुजीत

6

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

<projectFile>${projectName}</projectFile>

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

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

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

1
mvn clean package -DpropEnv=PROD

फिर POM.xml में इस तरह का उपयोग करना

<properties>
    <myproperty>${propEnv}</myproperty>
</properties>
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.