2015-04-06 7 views
22

हाल ही में मैं कुछ समय पहले विकसित परियोजना में कुछ सुधारों पर काम कर रहा हूं और यही मुझे मिला। पोम फाइलों में बहुत से निर्भरता निर्दिष्ट संस्करणों के बिना जाते हैं और फिर भी वे हल हो जाते हैं। परियोजना में 1 रूट मॉड्यूल और 2 submodules शामिल हैं। एग्रीगेटर पैटर्न का उपयोग किया जाता है, जिसका अर्थ है कि कोई निर्भरता प्रबंधन अनुभाग बिल्कुल नहीं है। ऊपरी-प्रोजेक्ट बस 2 मॉड्यूल को जोड़ता है और यह सब कुछ करता है। सबप्रोजेक्ट्स इसे माता-पिता के रूप में संदर्भित नहीं करते हैं। उनके पास एक अलग माता पिता है। जो मैं समझ नहीं पा रहा हूं वह यह है कि न तो सबप्रोजेक्ट स्वयं और न ही उनके माता-पिता (वास्तव में, इसमें निर्भरता नहीं है) या तो कुछ निर्भरताओं के लिए संस्करण निर्दिष्ट करें। उदाहरण के लिए:संस्करण के बिना मेवेन निर्भरता

<dependency> 
    <groupId>javax.mail</groupId> 
    <artifactId>javax.mail-api</artifactId> 
</dependency> 
<dependency> 
    <groupId>com.sun.mail</groupId> 
    <artifactId>javax.mail</artifactId> 
</dependency> 
<dependency> 
    <groupId>com.sun.mail</groupId> 
    <artifactId>imap</artifactId> 
</dependency> 
<dependency> 
    <groupId>org.slf4j</groupId> 
    <artifactId>jcl-over-slf4j</artifactId> 
</dependency> 
<dependency> 
    <groupId>org.slf4j</groupId> 
    <artifactId>jul-to-slf4j</artifactId> 
</dependency> 
<dependency> 
    <groupId>ch.qos.logback</groupId> 
    <artifactId>logback-classic</artifactId> 
</dependency> 

क्या कोई इसे समझने में मेरी सहायता कर सकता है? ऐसा लगता है कि कुछ डिफ़ॉल्ट रणनीति के साथ मैवेन हैंडल वर्जनिंग।

+0

क्या आप सुनिश्चित करने के लिए 'mvn -version' आउटपुट दिखा सकते हैं? –

+2

कलाकृतियों के संस्करणों को परिभाषित किए बिना मेवेन के लिए काम करना असंभव है। उन्हें या तो सबमिशन या माता-पिता में 'निर्भरता प्रबंधन' टैग में परिभाषित किया जाना चाहिए। कृपया अपने पोम पदानुक्रम की जांच करें। एमवीएन सहायता का प्रयोग करें: प्रभावी-पोम – Ozgen

+1

क्या आपने 'mvn help: प्रभावी-pom -Doutput = result.xml' के माध्यम से चेक किया है और जांच करें कि कोई निर्भरता प्रबंधन नहीं है या नहीं। – khmarbaise

उत्तर

18

ठीक है, मुझे लगता है कि मैं इसे स्वयं जवाब दूंगा। बेशक मैंने निर्भरता पर एक नज़र डाली: पेड़, लेकिन सभी निर्भरताओं का मैंने उल्लेख किया कि पेड़ के प्रथम स्तर के सदस्य कहां हैं। क्या मैं, अभी नोटिस करने में विफल रहा है कि dependencyManagement माता-पिता में मौजूद नहीं है, लेकिन यह फिर भी submodules में मौजूद है, और क्या और अधिक दिलचस्प यह होता है:

 <dependency> 
      <groupId>io.spring.platform</groupId> 
      <artifactId>platform-bom</artifactId> 
      <version>1.0.2.RELEASE</version> 
      <type>pom</type> 
      <scope>import</scope> 
     </dependency> 

मैं उपयोग नहीं किया है वसंत आईओ प्लेटफार्म इससे पहले, तो यह मेरे लिए एक बिल्कुल नई अवधारणा है। चूंकि यह पता चला है कि प्लेटफ़ॉर्म में कुछ पूर्व-कॉन्फ़िगर किए गए निर्भरताएं शामिल हैं: http://docs.spring.io/platform/docs/current/reference/htmlsingle/#appendix-dependency-versions

+1

यह स्प्रिंग से संबंधित नहीं है लेकिन मेवेन बीओएम "सामग्री का बिल" पैटर्न है, जिसका उपयोग कुछ लाइब्रेरी का उपयोग करने के लिए आवश्यक निर्भरताओं को परिभाषित करने के लिए किया जाता है। देखें [मेवेन निर्भरता तंत्र] (https://maven.apache.org/guides/introduction/introduction-to- निर्भरता-mechanism.html) – estani

13

कलाकृतियों के संस्करणों को परिभाषित किए बिना मेवेन के लिए काम करना असंभव है। उन्हें निर्भरता में कहीं भी परिभाषित किया जाना चाहिए प्रबंधन टैग या तो सबमिशन या अभिभावक में। कृपया अपने पोम पदानुक्रम की जांच करें। प्रोजेक्ट की सबमिशन निर्देशिका में mvn help:effective-pom का उपयोग करें। इसके अलावा आप mvn dependency:tree का उपयोग कर सकते हैं ताकि यह पता चल सके कि कौन सी कलाकृतियों - संस्करण संख्या समेत पूर्ण आर्टिफैक्ट जानकारी के साथ - निर्भरता प्रबंधन के परिणामस्वरूप हल हो जाती है।

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