2012-10-30 16 views
6

के सापेक्ष मेवेन एससीएम यूआरएल हमारे पास सामान्य कॉन्फ़िगरेशन को परिभाषित करने वाले माता-पिता (एग्रीगेटर) प्रोजेक्ट के साथ एसवीएन में निम्न प्रोजेक्ट संरचना नहीं है। माता-पिता को व्यक्तिगत रूप से प्रबंधित और जारी किया जाता है।माता-पिता

trunk 
    +parent 
     pom.xml 
    +project1 
     pom.xml 
     +project1_1 
      pom.xml 
     +project1_2 
      pom.xml 
    +project2 
     pom.xml 

तो मूल रूप से प्रत्येक वास्तविक परियोजना (Project1, Project2) इसके उप-परियोजनाओं के लिए एक एग्रीगेटर के रूप में प्रयोग किया जाता है। सामान्य कॉन्फ़िगरेशन सेटिंग्स (जावा कंपाइलर संस्करण, अन्य प्लगइन्स) माता-पिता में रखी जाती हैं, जिनका उपयोग सभी परियोजनाओं (प्रोजेक्ट 1, प्रोजेक्ट 2) में मेवेन parent के रूप में किया जाता है।

अभिभावकों में परिभाषित करने वाली सेटिंग्स में से एक है सबवर्सन के लिए एससीएम यूआरएल, उदा। पैरेंट pom.xml में http://svnhost/base/trunk/parent

जब मैं ऐसा करता हूं, व्यक्तिगत परियोजनाएं इस सेटिंग का उत्तराधिकारी होती हैं, लेकिन निश्चित रूप से पथ की सापेक्ष प्रकृति को प्रतिबिंबित नहीं करती हैं। प्रोजेक्ट 1 में, यह http://svnhost/base/trunk/parent/ पर हल किया गया है - मैंने इसे mvn help:effective-pom के साथ चेक किया है।

क्या एससीएम कनेक्शन निर्दिष्ट करने का कोई तरीका है ताकि माता-पिता के सापेक्ष हल हो सके? या क्या मुझे प्रत्येक व्यक्तिगत परियोजना में एससीएम यूआरएल प्रदान करना है?

उत्तर

3

यदि आप scm.url बनाने के लिए ${svn.host} और ${svn.path} जैसी गुणों का उपयोग करना संभव है तो यह संभव होना चाहिए। रिलीज प्लगइन में एक बग था जहां गुणों को रिलीज़ के दौरान बदल दिया गया: http://jira.codehaus.org/browse/MRELEASE-128 लेकिन संस्करण 2.3 के बाद से यह तय किया जा रहा है। तो आपके बच्चे के पोम्स केवल गुणों को परिभाषित करते हैं लेकिन अब एसएमएम यूआरएल नहीं है।

मुझे नहीं पता कि इससे मदद मिलती है या नहीं। आप pom.xml में अधिक लाइनों को नहीं बचाते हैं और आप खतरे को पेश करते हैं जो लोग गुणों को नहीं बदलते हैं।

आप माता-पिता में parent.scm.url की संपत्ति को परिभाषित करने और उसके बाद का उपयोग है कि बच्चे में संपत्ति एक रिश्तेदार यूआरएल (<scm.url>${parent.scm.url}/../myproject</scm.url>) जोड़ने आप उस प्रॉपर्टी आप अभी भी आधार पर scm.url में रिश्तेदार पथ करते हैं तो अधिकांश कॉन्फ़िगरेशन को सेव न करें?

मुझे लगता है कि आप वास्तव में चाहते हैं कि आप एक प्लगइन लिखना चाहते हैं जो माता-पिता को यूआरएल पढ़ता है, फिर वर्तमान कार्यशील प्रतिलिपि से यूआरएल पढ़ता है (क्योंकि मैवेन को यह पता नहीं है कि उस परियोजना यूआरएल को कहां ढूंढना है, क्योंकि यह कॉन्फ़िगर नहीं है) और फिर इसके सापेक्ष पथ की गणना करें। मुझे लगता है कि प्रत्येक पोम में scm.url कॉन्फ़िगरेशन को दोहराने की तुलना में एक अजीब लगता है।

+0

धन्यवाद - ये मेरे निष्कर्ष भी हैं। मुझे लगता है कि मैं बस प्रत्येक शीर्ष-स्तरीय एग्रीगेटर प्रोजेक्ट (प्रोजेक्ट 1, प्रोजेक्ट 2 में मेरे उदाहरण में) में एससीएम यूआरएल को परिभाषित कर दूंगा, क्योंकि मुझे चर का उपयोग करने से बहुत कुछ नहीं मिलेगा। – nwinkler

2

एक बहु-मॉड्यूल निर्माण के भीतर आपको केवल अपनी परियोजना के रूट स्तर पर एसएमएम कनेक्शन को परिभाषित करने की आवश्यकता है। लेकिन आपका प्रोजेक्ट लेआउट उस के सही सेटअप की तरह दिखता नहीं है। आप ट्रंक फ़ोल्डर के नीचे सीधे अपने माता-पिता/pom.xml क्यों नहीं डालते? अगर आपको माता-पिता को अलग से रिलीज करने की ज़रूरत है तो यह माता-पिता को वास्तव में एक अलग स्टैंड-ए-ऑनलाइन मेवेन प्रोजेक्ट बनाने का संकेत है।

+0

ठीक है, माता-पिता एक स्टैंड-अलोन प्रोजेक्ट है, जिसे अन्य सभी परियोजनाओं के लिए सामान्य सेटिंग्स रखना है। प्रत्येक शीर्ष-स्तरीय प्रोजेक्ट (प्रोजेक्ट 1, प्रोजेक्ट 2 मेरे उदाहरण में) इसके मॉड्यूल के लिए एग्रीगेटर के रूप में कार्य करता है। ऐसा लगता है कि मुझे इन शीर्ष-स्तरीय परियोजनाओं में से प्रत्येक में एससीएम यूआरएल निर्दिष्ट करना होगा, जबकि मैं केंद्रीय माता-पिता पीओएम में अन्य सेटिंग्स (जैसे मेवेन रेपो को तैनात करने के लिए) रख सकता हूं। – nwinkler

+0

मुझे लगता है कि यदि आप अपनी परियोजनाओं को एसवीएन में मूल फ़ोल्डर में ले जाते हैं लेकिन उन्हें रूट पोम में मॉड्यूल के रूप में नहीं जोड़ते हैं, तो एकमात्र मुद्दा यह है कि जब आप पैरेंट पोम जारी करते हैं तो आप सभी प्रोजेक्ट को बनाए गए टैग में जोड़ते हैं। लेकिन जिस तरह से आप वर्णन करते हैं वह बहुत अधिक "मज़बूत" है - मैं इसका इस्तेमाल करूंगा। – wemu