2010-11-11 19 views
8

हमारी कंपनी Maven poms के संबंध में "सर्वोत्तम प्रथाओं" के एक नंबर परिभाषित किया गया है। उदाहरण के लिए, संसाधन प्रसंस्करण के लिए utf-8 निर्दिष्ट करना, कौन से फ़ोल्डरों को फ़िल्टर करना है, इकाई परीक्षण बनाम एकीकरण परीक्षण, और कंपाइलर सेटिंग्स को संभालना।असंबद्ध परियोजनाओं में एक मेवेन pom.xml के हिस्सों को साझा करने का सबसे अच्छा तरीका?

अभी, इन सर्वोत्तम प्रथाओं को हमारी कंपनी विकी पर दस्तावेज किया गया है, लेकिन जब "सर्वोत्तम प्रथाओं" की सूची में परिवर्तन होता है, तो समस्याएं तब तक प्रोजेक्ट पोम्स में दिखाई देती हैं, जब तक कोई समस्या न हो। मानव प्रकृति जा रहा है कि यह क्या है और सभी ....

वहाँ कुछ जिस तरह से हम प्रदान कर सकते हैं/Maven के माध्यम से इन सेटिंग्स और गुण लागू है? यह लगभग हर प्रोजेक्ट को माता-पिता pom.xml देने जैसा है, लेकिन मैं नहीं चाहता (और नहीं कर सकता) इन सभी परियोजनाओं में एक ही पैरेंट पोम का संदर्भ है।

हम एक दृष्टिकोण है कि डेवलपर की मशीनों के साथ ही हमारे हडसन सीआई सर्वर पर काम करेंगे की जरूरत है।

+2

मैंने पढ़ा है कि "porn.xml" अन्य फ़ॉन्ट में। ☺ – tchrist

उत्तर

6

केवल Maven समाधान एक आम माता-पिता है। शायद अगर आपने 'रिलीज' माता-पिता का इस्तेमाल किया तो आप इसे कर सकते हैं?

केवल माता-पिता पोम युक्त एक परियोजना है, और रिलीज प्लगइन चलाने के लिए, अपने आंतरिक भंडार को प्रकाशित। फिर उस माता-पिता को अपनी सभी परियोजनाओं के अभिभावक के रूप में उपयोग करें, जिससे उन्हें अपने रेपो से इसे सापेक्ष पथनाम से ढूंढने के बजाय डाउनलोड किया जा सके?

+0

यदि मैं सही ढंग से समझता हूं, तो क्या मुझे सभी मौजूदा परियोजनाओं के लिए निर्देशिका संरचना को बदलना नहीं होगा? साथ ही, मैं सोच रहा हूं कि यह हमारी रिलीज प्रक्रिया पर विनाश को खत्म कर सकता है। लेकिन इस सुझाव ने मुझे कम से कम आंशिक pom.xml स्रोत नियंत्रण के तहत रखने का विचार दिया .... – HDave

+1

सभी में निर्देशिकाओं में कोई बदलाव नहीं। एक माता-पिता को फ़ाइल सिस्टम वृक्ष संबंध नहीं होना चाहिए। यह सिर्फ एक संग्रह से प्राप्त एक आर्टिफैक्ट हो सकता है। – bmargulies

+0

मैंने जो किया वह मैंने किया और यह महान काम किया। बहुत बहुत धन्यवाद। निर्देशिका मानसिक-ब्लॉक के अलावा मेरे पास (लंबे समय तक) गलत धारणा भी थी कि किसी भी पोम.एक्सएमएल जो माता-पिता को संदर्भित करता है उसे उस माता-पिता के भीतर मॉड्यूल के रूप में नामित किया जाना चाहिए - यानी माता-पिता और बच्चों को द्वि- दिशात्मक रूप से सहयोगी। – HDave

2

एक मास्टर पोम के बिना, वहाँ लागू करने के लिए क्या आप के लिए पूछ (और न ही हर परियोजना पहली जगह में अच्छी तरह से इससे निपटने होगा) कोई तकनीकी तरीका है। समय के साथ विकसित होने के लिए सर्वोत्तम प्रथाओं को लागू करने का एकमात्र प्रभावी तरीका यह है कि इसे लागू करने के लिए किसी का काम करना है। आप इसे कई लोगों में फैला सकते हैं (उदाहरण के लिए, इसे अपने नौकरी के विवरण में जोड़कर) लेकिन यह इसे भूलने के लिए छोड़ देता है क्योंकि हर कोई यह मान लेगा कि कोई और इसे कर रहा है। नाम से पहचाना जाने वाला एक व्यक्ति, और कोई बकाया नहीं होगा।

3

यह लगभग हर एक माता पिता pom.xml परियोजना देने की तरह है, लेकिन मैं नहीं चाहता कि (और नहीं कर सकते हैं) इन सभी परियोजनाओं का संदर्भ एक ही मूल पोम है।

मैं यह नहीं कह रहा हूँ जरूरी एक माता पिता पोम में सब कुछ डाल करने के लिए, लेकिन एक कारपोरेट वातावरण में, यह वास्तव में एक अच्छा विचार है एक शीर्ष स्तर कॉर्पोरेट पोम के लिए (Maven पुस्तक की धारा 3.6.2.2. Multi-module Enterprise Project में दर्शाया गया है) , अपने स्वयं के रिलीज चक्र के साथ।

लेकिन यह कुछ भी लागू करने के लिए पर्याप्त नहीं होगा और मेरे सुझाव Maven Enforcer Plugin कि existing rules प्रदान करता है, लेकिन यह भी maven-enforcer-rule-api का उपयोग कर अपने स्वयं के कस्टम नियमों लिखने के लिए अनुमति देता है को देखने के लिए होगा। मैं टिप्पणी नहीं कर सकता कि आप कस्टम नियमों के साथ कितनी दूर जा सकते हैं। वैसे भी, मैं अत्यधिक इस प्लगइन की सिफारिश करते हैं। यदि आप अभी तक इसका उपयोग नहीं कर रहे हैं, तो यह निश्चित रूप से शुरू करने का समय है :)

+0

करेंगे ... धन्यवाद। – HDave

4

आप अपनी कंपनी के सर्वोत्तम प्रथाओं को पूरा करने वाली सेटिंग्स के साथ मेवेन प्रोजेक्ट आर्केटाइप बना सकते हैं। यह 'लागू' समाधान से 'प्रदान' है और संभवतः पर्याप्त नहीं हो सकता है (वास्तव में उन सर्वोत्तम प्रथाओं के आधार पर)। http://maven.apache.org/guides/mini/guide-creating-archetypes.html

+0

यह एक अच्छा विचार है, आर्केटाइप वास्तव में मेरे नए मानकीकृत पेरेंट पोम का संदर्भ दे सकता है ... और मैवेन-रिलीज-प्लगइन के लिए एससीएम यूआरएल सही तरीके से स्थापित कर सकता है। – HDave

4

(यह एक पुराने धागा, मैं सिर्फ संदर्भ के लिए इस जानकारी को जोड़ रहा है)

निर्भरता के लिए, आप "dependencyManagement" आयात गुट उपयोग कर सकते हैं (लेकिन यह केवल निर्भरता और गुण नहीं के साथ काम करेंगे, और इसी तरह)।

बस "पुस्तकालय" पोम सामान्य रूप से विभिन्न निर्भरताओं को परिभाषित करता है (उनके बहिष्करण और विशिष्ट संस्करणों के साथ)।

फिर अपनी परियोजना के मुख्य पोम में, आप उस निर्भरता अनुभाग को अपने "निर्भरता प्रबंधन" अनुभाग में आयात करेंगे: लाइब्रेरी पोम में परिभाषित प्रत्येक निर्भरता आयात की जाएगी। और, इसके अलावा, इस निर्भरता में परिभाषित प्रत्येक संस्करण प्रबंधन हमेशा मेवेन द्वारा उपयोग किया जाएगा (मेवेन निर्भरता प्रबंधन में परिभाषित एक से अधिक संस्करण नहीं लेगा)। यदि आपके पास समान पुस्तकालयों पर निर्भर विभिन्न परियोजनाएं हैं, तो अपने क्लासपाथ को प्रबंधित करने के लिए यह लगभग अनिवार्य है।

अपने मुख्य परियोजना के पोम में, इस तरह पुस्तकालय पोम आयात:

<dependencyManagement> 
    <dependencies> 
     <dependency> 
      <groupId>com.mycompany.mylibrary</groupId> 
      <artifactId>mylibrary-artifact</artifactId> 
      <version>mylibrary-version</version> 
      <type>pom</type> 
      <scope>import</scope> 
     </dependency> 
     ... 

चेक online maven documentation

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

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