2012-06-08 23 views
7

मेरे पास एक मैवेन पीओएम है जो मैं टेम्पलेट के रूप में उपयोग करना चाहता हूं, जो विभिन्न तर्कों के साथ कलाकृतियों का उत्पादन करता हूं, इसके आधार पर मैं किस तर्क को पास करता हूं। लेकिन मैं यह नहीं समझ सकता कि रनटाइम पर artifactId निर्दिष्ट कैसे करें।क्या मैं रनवेटाइम पर maven project.artifactId निर्दिष्ट कर सकता हूं?

अगर मैं <artifactId> तत्व इस तरह parameterize:

<artifact>foo-${bar}</artifact> 

Maven शिकायत:

[चेतावनी] 'artifactId' एक अभिव्यक्ति होता है, लेकिन एक निरंतर होना चाहिए।

अगर मैं पोम <artifactId> छोड़ देते हैं और साथ

mvn -Dproject.artifactId=foo ... 

Maven कमांड लाइन पर यह निर्दिष्ट करने के लिए कोशिश की शिकायत:

[त्रुटि] 'artifactId' याद आ रही है।

क्या कोई अन्य चाल है जिसे मैं इसे पूरा करने के लिए उपयोग कर सकता हूं, अन्य टेम्पलेट से पीओएम फ़ाइल ऑन-द-फ्लाई उत्पन्न करने के अलावा? [हम्म, शायद मैं मेवेन संसाधन फ़िल्टरिंग का उपयोग कर ऐसा कर सकता हूं ...]

उत्तर

5

यदि मुझे यह सही लगता है तो आप ब्लूप्रिंट मैवेन एप्लिकेशन का पुन: उपयोग करना चाहते हैं और artifactId को बदलने में सक्षम होना चाहते हैं।

यह उपयोग केस मेवेन आर्केटीप्स के साथ सबसे अच्छा किया जा सकता है। this to get you started देखें। यह काफी सीधे आगे है और सीखने लायक है। आपके पास सामान्य मेवेन प्रोजेक्ट है और आप अपने ब्लूप्रिंट पोम में ${groupId} जैसे चर जोड़ते हैं। वे तो मूलरूप आदर्श पीढ़ी में आपके द्वारा दिए गए पैरामीटर द्वारा किसे बदला हो:

mvn archetype:generate         \ 
-DarchetypeGroupId=<archetype-groupId>    \ 
-DarchetypeArtifactId=<archetype-artifactId>   \ 
-DarchetypeVersion=<archetype-version>    \ 
-DgroupId=<my.groupid>        \ 
-DartifactId=<my-artifactId> 

भी GitHub पर लोग जहां Maven आद्यरूप For example में संरचना और फ़िल्टर करने के बारे में अधिक जान सकते द्वारा बनाई आद्यरूप का एक बहुत हैं।

वैकल्पिक रूप से आप आर्केटाइप सिस्टम का उपयोग किये बिना मेवेन फ़िल्टरिंग सेट अप करने का प्रयास कर सकते हैं लेकिन मुझे इसका कोई अनुभव नहीं है। मुझे नहीं लगता कि आप एक वैध आर्टिफैक्ट के बिना एक परियोजना चला सकते हैं, कुछ पीढ़ी इससे पहले होनी चाहिए (जैसे आर्केटाइप से उत्पन्न करना) लेकिन मुझे यकीन नहीं है।

+0

धन्यवाद, यह एक अच्छा फिट लगता है। ऐसा लगता है कि प्रत्येक मेवेन प्रश्न के रूप में "इसके लिए एक प्लगइन है" फ़ॉर्म का उत्तर है :-)। मुझे संदेह है कि मैवेन फ़िल्टरिंग का उपयोग करने का मेरा विचार एक गरीब व्यक्ति के आर्केटाइप की तरह समाप्त हो गया होगा, इसलिए पहिया को पुनर्निर्मित करने के बजाए कुछ सिद्ध होने के साथ यह समझ में आता है। –

+0

मैं मानता हूं कि archetypes जाने का रास्ता है, लेकिन यह वास्तव में सवाल का जवाब नहीं देता है। यहां तक ​​कि अगर यह पूरी तरह से खराब अभ्यास है, तो क्या रनटाइम पर artifactId सेट करना संभव है? – dokaspar

0

आप एक मेवेन सिद्धांत के खिलाफ जा रहे हैं, जो कि एक पोम माना जाता है कि एक स्थिर आर्टिफैक्ट उत्पन्न करने वाले स्वयं निहित प्रोजेक्ट का प्रतिनिधित्व करता है (यानी पैरामीट्रिक बिल्डों से बचें जिन्हें आसानी से पुन: उत्पन्न नहीं किया जा सकता है)।

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

+0

प्रतिक्रिया के लिए धन्यवाद। मेरा निर्माण कुछ हद तक पैरामीटरकृत है (और मैवेन कमांड लाइन, पर्यावरण इत्यादि से गुण प्राप्त करने के लिए इसके अंतर्निहित समर्थन पर विचार करते हुए, इसे बहुत हतोत्साहित नहीं करता है)। लेकिन मैं स्वीकार्य रूप से एक मैवेन रूकी हूँ।मुझे जो करना है वह एक "फैक्ट्री" प्रोजेक्ट लेता है और इसमें कई बदलाव होते हैं जो अलग-अलग कलाकृतियों का उत्पादन करते हुए केवल थोड़ा अलग होते हैं। मैं इंस्टॉल-फाइल पर एक नज़र डालेगा। –

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

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