2011-06-08 21 views
9

एक बड़े मेवेन 2 प्रोजेक्ट में निर्भरता प्रबंधन यह सुनिश्चित करने के लिए अच्छा है कि पूरे सिस्टम में निर्भरता का केवल एक संस्करण उपयोग किया जाए। यह प्रणाली को सुसंगत बनाता है।मेवेन निर्भरता प्रबंधन को साफ करें

लेकिन जब मैं प्रभावी पीओएम उत्पन्न करता हूं तो मुझे देखने का कोई मौका नहीं है कि निर्भरता संस्करण कहां से आया था। इसी तरह पदानुक्रम के शीर्ष पर एक पीओएम में मुझे नहीं पता कि बच्चे पीओएम में निर्भरता प्रबंधन अनुभाग के परिभाषित संस्करणों का वास्तव में उपयोग किया जाता है।

तो मैं निर्भरता प्रबंधन को कैसे साफ रखूं? जब मैं एक प्रोजेक्ट में निर्भरता को हटाता हूं, तो मैं हमेशा अन्य सभी परियोजनाओं में जांच करता हूं यदि इसकी अभी भी आवश्यकता है, ताकि मैं शीर्ष पर निर्भरता प्रबंधन से भी हटा सकूं?

इसके अलावा, मैं निर्भरता प्रबंधन कैसे बना सकता हूं, यह सुनिश्चित कर रहा हूं कि यह बच्चे पीओएम में कहीं डुप्लीकेट नहीं है? जब मैं निर्भरता जोड़ता हूं तो मैं हमेशा यह देखने के लिए सभी अन्य परियोजनाओं की जांच करता हूं कि क्या यह निर्भरता प्रबंधन में शीर्ष पर एकत्रित किया जा सकता है? या क्या आप हमेशा शुरुआत से शीर्ष पर सभी निर्भरता संस्करणों को स्थानांतरित करेंगे ताकि वे हमेशा एक ही स्थान पर हों?

किसी भी विचार के लिए धन्यवाद।

+0

एक और विचार मैं सिर्फ था: क्यों सभी मॉड्यूल के माध्यम से एक ही संस्करण नंबर का उपयोग नहीं है, और $ {project.version} जितनी बार संभव पर भरोसा करते हैं कुछ इस तरह देखेंगे। आदर्श रूप से मेरे पास केवल शीर्ष पीओएम में संस्करण संख्या है और हर जगह चर का उपयोग करें। इस तरह मुझे कोई निर्भरता प्रबंधन की आवश्यकता नहीं है, सभी आंतरिक निर्भरता संस्करण सीधे चर के साथ निर्दिष्ट किए गए हैं। – anselm

उत्तर

2

यदि आप ग्रहण का उपयोग कर रहे हैं, तो m2eclipe प्लगइन आपको पोम के लिए निर्भरता पदानुक्रम देखने की अनुमति देता है। यह निर्धारित करने की कोशिश करते समय यह बहुत उपयोगी हो सकता है कि आपकी परियोजना में निर्भरताएं कहां लाई जाती हैं और जहां संघर्ष हो रहे हैं।

1

आपको उन परियोजनाओं में निर्भरता घोषित करनी चाहिए जिनमें उनका उपयोग किया जाता है, जब तक कि यह सभी परियोजनाओं में उपयोग नहीं किया जाता है। यदि, उदाहरण के लिए, आपकी सभी परियोजनाओं के लिए वसंत का उपयोग किया जाता है, तो उसे मूल पीओएम में रखें। यदि यह केवल कुछ परियोजनाओं में उपयोग किया जाता है, तो इसे प्रत्येक में घोषित करें और माता-पिता में एक spring.version संपत्ति डालें जो प्रत्येक बच्चे के पोम अपने संस्करण के लिए उपयोग कर सकते हैं।

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

+0

मुझे निर्भरता प्रबंधन या किसी संपत्ति में संस्करण निर्दिष्ट करने के बीच अंतर दिखाई नहीं देता है। माता-पिता निर्भरता प्रबंधन पर निर्भरता को स्थानांतरित करने के लिए आपके पीओएम पर संस्करण संख्या फैलाने का नुकसान नहीं होता है, जिसके परिणामस्वरूप पूरे आवेदन में एक निर्भरता के कई संस्करण होते हैं। – anselm

+0

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

8

आप अपनी परियोजना के लिए एक या अधिक बम्स (सामग्री का बिल) बना सकते हैं। ये pom.xmls आपकी परियोजना में dependencyManagement अनुभाग के भीतर उपयोग की जाने वाली सभी निर्भरताओं की घोषणा करेंगे।

प्रत्येक बच्चे के पोम में, आप इन बम आयात करेंगे और परियोजना के लिए आवश्यक उन निर्भरताओं का उपयोग करेंगे।

इस तरह, निर्भरता संस्करण केंद्रीय रूप से प्रबंधित होते हैं, जबकि साथ ही, प्रत्येक बच्चे पोम केवल उन निर्भरताओं का उपयोग करता है जिनकी आवश्यकता होती है।

देखें Importing Managed Dependencies

बीओएम परियोजना

<project> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>my.group</groupId> 
    <artifactId>My-Project-Bom</artifactId> 
    <version>1.0</version> 
    <packaging>pom</packaging> 
    <dependencyManagement> 
    <dependencies> 
     <dependency> 
     <groupId>commons-beanutils</groupId> 
     <artifactId>commons-beanutils</artifactId> 
     <version>1.7.0</version> 
     </dependency> 
     ... 
    </dependencies> 
    </dependencyManagement> 
</project> 

बाल परियोजना

<project> 
<modelVersion>4.0.0</modelVersion> 
<groupId>my.group</groupId> 
<artifactId>child1</artifactId> 
<packaging>jar</packaging> 
<name>Child1</name> 
<version>1.0</version> 
<dependencyManagement> 
    <dependencies> 
    <dependency> 
     <groupId>my.group</groupId> 
     <artifactId>My-Project-BOM</artifactId> 
     <version>1.0</version> 
     <type>pom</type> 
     <scope>import</scope> 
    </dependency> 
    </dependencies> 
</dependencyManagement> 
<dependencies> 
    <dependency> 
     <groupId>commons-beanutils</groupId> 
     <artifactId>commons-beanutils</artifactId> 
    </dependency> 
</dependencies> 
... 
</project> 

maven dependency plugin आप निर्भरता पदानुक्रम प्राप्त करने में मदद करने के लिए कुछ लक्ष्य होते हैं।

mvn dependency:list 
mvn dependency:tree 
mvn dependency:analyze 
+0

अच्छा विचार मुझे नहीं पता था। लेकिन चूंकि हमारे पास एक शीर्ष-स्तरीय पीओएम है कि अन्य सभी पीओएम बच्चे हैं, मैं केवल निर्भरता प्रबंधन का उपयोग कर सकता हूं। मैं अभी भी नहीं देखता कि यह कैसे निर्भरता प्रबंधन की सफाई की समस्या को हल करेगा। बीओएम के अंदर समस्या एक जैसी होगी। – anselm

+0

इस दृष्टिकोण के बारे में कभी नहीं पता था। मुझे यह पसंद है क्योंकि यह आपको वर्जनिंग पर नियंत्रण देता है लेकिन निर्भरता अभी भी घोषित की जाती है जहां उन्हें उचित दायरे के साथ आवश्यकता होती है। यदि आवश्यक हो तो एक विशिष्ट संस्करण का उपयोग करना भी आसान है। – Robin

+0

इसी तरह के लिंक [क्या एक maven pom.xml से अप्रयुक्त निर्भरताओं को हटाने का कोई आसान तरीका है? - स्टैक ओवरफ़्लो] (http://stackoverflow.com/questions/1517611/is-there-a-simple-way-to-remove-unused- निर्भरता-from-a-maven-pom-xml) –

0

आप पोम निर्भरता को पोम, और कोड संदर्भों है कि उन्हें कारण, Structure101composition perspective का उपयोग कर प्राप्त कर सकते हैं। एक नया s101 प्रोजेक्ट बनाएं, मेवेन टाइप करें, रूट pom.xml फ़ाइल निर्दिष्ट करें, समाप्त करें (शेष विज़ार्ड के लिए डिफ़ॉल्ट का उपयोग करें), फिर संरचना परिप्रेक्ष्य का चयन करें (यूआई के ऊर्ध्वाधर टूलबार के ऊपरी बाईं ओर दूसरा बटन) और आप

Structure101 POM dependency graph

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