2009-12-17 8 views
20

मैं अपनी परियोजना (वेल्ड) के लिए मेवेन 2 आर्केटीप्स बना रहा हूं। archetype:generate के दौरान परिभाषित संपत्ति के मूल्य के आधार पर जेनरेट की गई परियोजना में कौन सी फाइलें रखी गई हैं, इसे नियंत्रित करने में सक्षम होना चाहूंगा।प्रोजेक्ट जेनरेट होने पर मैं एक आर्केटाइप से फ़ाइल को सशर्त रूप से शामिल या बहिष्कृत कैसे करूं?

Define value for groupId: : com.example 
Define value for artifactId: : myproject 
Define value for package: com.example: : 
Define value for includeGradleSupport: : y 

includeGradleSupport का मूल्य के आधार पर, मैं शामिल करने के लिए (या शामिल नहीं) उत्पन्न परियोजना में build.gradle फ़ाइल हैं: उदाहरण के लिए, मैं निम्नलिखित शीघ्र पूर्वानुमान। यदि उपयोगकर्ता ग्रैडल समर्थन नहीं चाहता है, तो मैं जेनरेटेड प्रोजेक्ट को अनावश्यक फ़ाइलों के साथ अव्यवस्थित नहीं करना चाहता हूं।

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

डेवलपर का उपयोग करने के इरादे के आधार पर परियोजना के अनुकूलन के बारे में यह सब कुछ है। जबकि मैं एक पूरी तरह से अन्य archetype बना सकता है, कभी-कभी परिवर्तन इतने मामूली होते हैं कि फ़ाइल को शामिल/बहिष्कृत करना आसान होगा।

archetype-metadata.xml वर्णनकर्ता का उपयोग कर इस व्यवहार को नियंत्रित करने का कोई तरीका है?

+1

इस मुद्दे के अनुसार: http://jira.codehaus.org/browse/ARCHETYPE-58 यह सुविधा इसके रास्ते पर है। अब हमें इसके लिए कुछ दस्तावेज़ देखने की जरूरत है (यह कितना समय इंतजार कर सकता है?) –

+0

मैंने थोड़ी देर के लिए एक परियोजना पर काम किया जो इस तरह के व्यवहार के लिए प्रोफाइल का इस्तेमाल करता था और यह बुरी तरह से चला गया और हमारे निर्माण और पोम्स बेहद जटिल थे। हम अंत में निष्कर्ष पर पहुंचे कि एक नई परियोजना संरचना स्थापित करने के लिए सबसे अच्छी बात यह है कि हमारा मुख्य आवेदन कोड जारड हो गया था और फिर विभिन्न तैनाती विन्यास पूरी तरह अलग थे जो मुख्य परियोजना पर निर्भरता रखते थे। यह बहुत सारे निर्माण और परियोजनाएं बनाता है लेकिन वे सभी सरल और आसान बनाए रखने के लिए आसान हैं और एक आर्टिफैक्ट है। –

उत्तर

0

मैं देख सकता हूं कि यह आर्केटाइप प्लगइन में इसे सक्षम करने के लिए क्या कोडिंग करेगा।

मुझे लगता है कि प्राथमिक वाहन आज मूल कार्य के दौरान दो अलग-अलग आर्केटाइप कलाकृतियों का उत्पादन करेगा। आर्किटेप उपयोगकर्ता तब स्पष्ट रूप से आपके आर्टकेटाइप-सब कुछ या आपके बिना किसी चीज का उपयोग करेगा।

मुझे पता है कि यह पूरी तरह से नहीं है और आप सहमत हैं कि आप जो मांग रहे हैं वह एक समझदार उपयोग केस है।

+2

हम्म, एक ही परियोजना से कई कलाकृतियों का निर्माण मैवेन के दर्शन (एक परियोजना => एक आर्टिफैक्ट) के खिलाफ होगा। मुझे सच में लगता है कि यह एक उपयोगी बात होगी। मैं सामग्री को बदलने के लिए फ़ाइल के अंदर वेग का उपयोग कर सकता हूं, लेकिन मैं जो नहीं कर सकता वह पूरी फाइलों को शामिल या बहिष्कृत करता है, जो वास्तव में उसी विचार का विस्तार है। मैं आपके प्रोटोटाइप की प्रतीक्षा कर रहा हूं;) –

0

जबकि मैं एक संपूर्ण अन्य आर्केटाइप बना सकता हूं, कभी-कभी परिवर्तन इतने हल्के होते हैं कि फ़ाइल को शामिल/बहिष्कृत करना आसान होगा।

यह वाक्य मुझे लगता है कि बनाया ...

ऐसा लगता है कि आप एक डिफ़ॉल्ट परियोजना संरचना है।
मान लीजिए कि यह बड़ा है, इसमें कई फाइलें हैं। बेशक, आप तर्क और फ़ाइलों को एक अलग आर्केटाइप में डुप्लिकेट नहीं करना चाहते हैं।

अब कभी-कभी, एक परियोजना के अतिरिक्त व्यवहार (ग्रैडल से संबंधित) होता है।
यह एक अन्य आर्केटाइप के लिए एक सामान्य उपयोग-मामला है जो कुछ भी नहीं शुरू होता है, लेकिन यह पहले के बाद आता है। मैंने वेब पर ऐसे archetypes के कई उदाहरण देखा है। डेवलपर केवल इस आर्केटाइप को ट्रिगर करता है अगर परियोजना को गद्दे की आवश्यकता होती है। :-)

तो मेरा सुझाव है: अपना गद्दे आर्केटाइप बनाएं, जो केवल गद्दे से संबंधित फ़ाइलों को जोड़ता है।

+0

क्या आप कह रहे हैं कि हमारे पास "आंशिक" आर्केटाइप कहा जाना चाहिए जो कि मौजूदा प्रोजेक्ट (संभवतः आधार आर्केटाइप द्वारा बनाई गई) पर परतें हो? यह अभी भी एंड डेवलपर के लिए बहुत अधिक काम की तरह लगता है। वे दो archetype चलाने के लिए नहीं चाहते हैं: आदेश उत्पन्न, वे एक चलाने के लिए चाहते हैं। यदि, दूसरी तरफ, आप सुझाव दे रहे हैं कि हम एक दूसरी आर्केटाइप बनाते हैं जो अतिरिक्त फाइलों में मूल फाइलों में विलय करता है, जो मेरे लिए मेवेन में सम्मेलन तोड़ता है जहां एक परियोजना एक आर्टिफैक्ट उत्पन्न करती है। शायद अगर आर्केटाइप साझा फाइलों में खींच सकता है तो यह एक और संभावना होगी। –

+0

@ डैन मैं आंशिक आर्केटाइप समाधान का सुझाव दे रहा था :-)। मेरा मानना ​​है कि वैचारिक जटिलता अंत डेवलपर के लिए समान है, क्योंकि उसे सभी मामलों में दो विचारों को जानना है। कार्यान्वयन में, आप आश्वस्त कर सकते हैं कि उसे और टाइपिंग करने की आवश्यकता नहीं है ;-)। साथ ही, यदि आवश्यक हो तो कॉल को दो को एक ही कमांड से लपेटना आसान होना चाहिए, है ना? – KLE

1

मैं व्यक्तिगत रूप से भागों है कि हटाया जा सकता है/उपयोगकर्ता अनुरोध पर जोड़ा चले जाते हैं और इसलिए यू अलग प्रोफाइल

+0

हां, यह निश्चित रूप से एक वैध दृष्टिकोण है। लेकिन हमारे मामले में, हम उपयोगिता के कारणों के लिए जेनरेट की गई परियोजना की जटिलता को कम करना चाहते हैं। जब डेवलपर सर्वलेट कॉन्फ़िगरेशन चुनता है, उदाहरण के लिए, हम चाहते हैं कि केवल उस परिदृश्य को समायोजित करें। –

0

जानकारी दान के लिए धन्यवाद का उपयोग कर विभिन्न हिस्से का निर्माण कर सकते अलग maven profiles में डाल दिया होता!

मैंने अभी आर्केटाइप प्लगइन स्रोत कोड को देखा, और http://jira.codehaus.org/browse/ARCHETYPE-58 इस समस्या को हल नहीं किया है।

बस इसे ट्रैक करने के लिए http://jira.codehaus.org/browse/ARCHETYPE-424 बनाया।

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