2009-05-22 12 views
50

मेरे पास एक प्लगइन के साथ एक मेवेन pom.xml है जिसे मैं कमांड लाइन पर नियंत्रण करने में सक्षम होना चाहता हूं। सब कुछ ठीक अन्यथा, खोज शुद्ध एक के बाद भी छोड़कर काम करता है, जबकि मैं समझ नहीं कैसे मेरे नियंत्रण संपत्ति के लिए एक डिफ़ॉल्ट मान सेट करने के लिए:कस्टम मैवेन 2 गुणों के लिए डिफ़ॉल्ट मान सेट करना

<plugin> 
    ... 
    <configuration> 
     <param>${myProperty}</param> 
    </configuration> 
    ... 
</plugin> 

तो अगर मैं

mvn -DmyProperty=something ... 

साथ Maven चलाने सबकुछ ठीक है, लेकिन मैं -DmyProperty=... स्विच के बिना भी मेरे प्रॉपर्टी को असाइन किया गया एक विशिष्ट मान रखना चाहता हूं। यह कैसे किया जा सकता है?

उत्तर

43

पुराना सवाल लेकिन मुझे लगता है कि सबसे सरल जवाब वहां नहीं है। आपके पास <build>/<properties> या नीचे दिखाए गए प्रोफ़ाइल में परिभाषित संपत्ति डिफ़ॉल्ट मान हो सकता है। जब आप -DmyProperty=anotherValue के साथ कमांड लाइन पर प्रॉपर्टी वैल्यू की आपूर्ति करते हैं तो यह पीओएम से परिभाषा को ओवरराइड कर देगा। मुझे आशा है कि मैं व्याख्या करने में सक्षम था ..

<profile> 
    ... 
    <properties> 
     <myProperty>defaultValue</myProperty>    
    </properties> 
    ... 
     <configuration> 
      <param>${myProperty}</param> 
     </configuration> 
    ... 
</profile> 
1

यह आप के लिए काम कर सकते हैं:

<profiles> 
    <profile> 
    <id>default</id> 
    <activation> 
     <activeByDefault>true</activeByDefault> 
    </activation> 
    <build> 
    <plugin> 
     <configuration> 
     <param>Foo</param> 
     </configuration> 
    </plugin> 
    </build> 
    ... 
    </profile> 
    <profile> 
    <id>notdefault</id> 
    ... 
    <build> 
     <plugin> 
     <configuration> 
      <param>${myProperty}</param> 
     </configuration> 
    </plugin> 
    </build> 
    ... 
    </profile> 
</profiles> 

इस तरह,

mvn clean अपने डिफ़ॉल्ट परम के रूप में "foo" का प्रयोग करेंगे। ऐसे मामलों में जब आप ओवरराइड करने के लिए की जरूरत है, mvn -P notdefault -DmyProperty=something

+1

इस nodefault सक्रिय करने के लिए जब तक कोई डी संपत्ति में पारित किया गया था एक सक्रियण ब्लॉक का उपयोग करके एक छोटे से सरल बनाया नहीं जा सका सब। – djangofan

+0

@djangofan आप सही हैं। मैं अपने जवाब को प्रश्न के बदले में एक बूंद बनाने की कोशिश कर रहा था। – sal

25

आप नीचे दिए गए की तरह कुछ इस्तेमाल कर सकते हैं का उपयोग करें:

<profile> 
    <id>default</id> 
    <properties> 
     <env>default</env> 
     <myProperty>someValue</myProperty>    
    </properties> 
    <activation> 
     <activeByDefault>true</activeByDefault> 
    </activation> 
</profile> 
+0

ठीक है, यह किया, धन्यवाद! –

+0

ग्रेट। कोई बात नहीं। –

30

टेलर ल दृष्टिकोण ठीक काम करता है, लेकिन आप अतिरिक्त प्रोफ़ाइल जरूरत नहीं है। आप बस पीओएम फ़ाइल में संपत्ति मूल्य घोषित कर सकते हैं।

<project> 
    ... 
    <properties> 
    <!-- Sets the location that Apache Cargo will use to install containers when they are downloaded. 
     Executions of the plug-in should append the container name and version to this path. 
     E.g. apache-tomcat-5.5.20 --> 
    <cargo.container.install.dir>${user.home}/.m2/cargo/containers</cargo.container.install.dir> 
    </properties> 
</project> 

तुम भी घटना है कि आप प्रत्येक उपयोगकर्ता अपने स्वयं के डिफ़ॉल्ट सेट करने में सक्षम होना चाहते में अपना उपयोगकर्ता settings.xml फ़ाइल में गुण सेट कर सकते हैं। हम इस दृष्टिकोण का उपयोग उन प्रमाणपत्रों को छिपाने के लिए करते हैं जिन्हें सीआई सर्वर नियमित डेवलपर्स से कुछ प्लग-इन के लिए उपयोग करता है।

2

akostadinov समाधान आम उपयोग के लिए अच्छा काम करता है ... लेकिन वांछित संपत्ति बहुत जल्दी mvn पोम पदानुक्रम प्रसंस्करण में (निर्भरता संकल्प चरण के दौरान रिएक्टर घटक द्वारा इस्तेमाल किया जाएगा, यदि। ..) आपको प्रोफाइल का उपयोग करना चाहिए "कोई भी सक्रियण" वैकल्पिक तंत्र लाइन सुनिश्चित करने के लिए परीक्षण तंत्र हमेशा pom.xml के अंदर दिए गए मान के संबंध में प्राथमिकता दी जाती है। और यह आपके पोम पदानुक्रम जो भी गहरा है।

ऐसा करने के लिए, आपके माता-पिता pom.xml में प्रोफ़ाइल के इस प्रकार जोड़ें:

<profiles> 
    <profile> 
     <id>my.property</id> 
     <activation> 
     <property> 
      <name>!my.property</name> 
     </property> 
     </activation> 
     <properties> 
     <my.property>${an.other.property} or a_static_value</my.property>    
     </properties> 
    </profile> 
    </profiles> 
+1

क्या आप एक उदाहरण पोम दिखा सकते हैं जहां सामान्य '-D' काम नहीं करता है? – akostadinov

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