2016-08-10 4 views
17

मैवेन और जेनकींस का उपयोग करने में नया हूं। मैं बच्चे को माता-पिता पोम से निर्भरता के वारिस कोशिश कर रहा हूँ पोम यह निम्न त्रुटियों पता चलता है:अभिभावक पोम से बच्चे के पोम पर निर्भरता का वारिस कैसे करें

..... 
<modelVersion>4.0.0</modelVersion> 
<parent> 
    <groupId>group1</groupId> 
    <artifactId>group1-artifact</artifactId> 
    <version>1.0.1</version> 
    <relativePath>(full url.....)/jenkins-parent-pom//pom.xml</relativePath> 
</parent> 
<groupId>group1</groupId> 
<artifactId>child1</artifactId> 
<version>0.0.1</version> 
<packaging>war</packaging> 
...... 
:

..... 
<modelVersion>4.0.0</modelVersion> 
<groupId>group1</groupId> 
<artifactId>group1-artifact</artifactId> 
<version>1.0.1</version> 
<packaging>pom</packaging> 

<modules> 
    <module>child1</module> 
</modules> 
....... 

यहाँ मेरे बच्चे पोम है:

[ERROR] COMPILATION ERROR : 
[INFO] ------------------------------------------------------------- 
[ERROR] /D:/jenkins/workspace/CBAW/testP/WSW_Investment/src/main/java/com/td/inv/wss/util/XMLConverters.java:[10,26] package com.rpmtec.current does not exist 
[ERROR] /D:/jenkins/workspace/CBAW/testP/WSW_Investment/src/main/java/com/td/inv/wss/util/XMLConverters.java:[11,26] package com.rpmtec.current does not exist 
[ERROR] /D:/jenkins/workspace/CBAW/testP/WSW_Investment/src/main/java/com/td/inv/wss/util/XMLConverters.java:[15,38] cannot find symbol 
    symbol: class AbstractRequestMessageData_Type 
    location: class com.td.inv.wss.util.XMLConverters 
[ERROR] /D:/jenkins/workspace/CBAW/testP/WSW_Investment/src/main/java/com/td/inv/wss/util/XMLConverters.java:[26,23] cannot find symbol 
    symbol: class AbstractResponseMessageData_Type 
    location: class com.td.inv.wss.util.XMLConverters 
[ERROR] /D:/jenkins/workspace/CBAW/testP/WSW_Investment/src/main/java/com/td/inv/wss/util/UsTermRateItemComparator.java:[5,42] package com.rpmtec.current.UsTermRate_Type does not exist 
[ERROR] /D:/jenkins/workspace/CBAW/testP/WSW_Investment/src/main/java/com/td/inv/wss/util/UsTermRateItemComparator.java:[7,61] cannot find symbol 
    symbol: class UsTermRateItems 
[ERROR] /D:/jenkins/workspace/CBAW/testP/WSW_Investment/src/main/java/com/td/inv/wss/util/UsTermRateItemComparator.java:[9,28] cannot find symbol 
    symbol: class UsTermRateItems 
    location: class com.td.inv.wss.util.UsTermRateItemComparator 
[ERROR] /D:/jenkins/workspace/CBAW/testP/WSW_Investment/src/main/java/com/td/inv/wss/util/UsTermRateItemComparator.java:[9,48] cannot find symbol 
    symbol: class UsTermRateItems 
    location: class com.td.inv.wss.util.UsTermRateItemComparator 
[ERROR] /D:/jenkins/workspace/CBAW/testP/WSW_Investment/src/main/java/com/td/inv/model/COIRQ.java:[9,40] package com.fasterxml.jackson.annotation does not exist 
[ERROR] /D:/jenkins/workspace/CBAW/testP/WSW_Investment/src/main/java/com/td/inv/model/COIRQ.java:[10,26] package com.rpmtec.current does not exist 
[ERROR] /D:/jenkins/workspace/CBAW/testP/WSW_Investment/src/main/java/com/td/inv/model/COIRQ.java:[11,26] package com.rpmtec.current does not exist 
[ERROR] /D:/jenkins/workspace/CBAW/testP/WSW_Investment/src/main/java/com/td/inv/model/COIRQ.java:[12,26] package com.rpmtec.current does not exist 
[ERROR] /D:/jenkins/workspace/CBAW/testP/WSW_Investment/src/main/java/com/td/inv/model/COIRQ.java:[13,26] package com.rpmtec.current does not exist 
[ERROR] /D:/jenkins/workspace/CBAW/testP/WSW_Investment/src/main/java/com/td/inv/model/COIRQ.java:[14,42] package com.rpmtec.current.UsTermRate_Type does not exist 
[ERROR] /D:/jenkins/workspace/CBAW/testP/WSW_Investment/src/main/java/com/td/inv/model/COIRQ.java:[19,2] cannot find symbol 
    symbol: class JsonIgnoreProperties 
[ERROR] /D:/jenkins/workspace/CBAW/testP/WSW_Investment/src/main/java/com/td/inv/model/COIRQ.java:[69,22] cannot find symbol 
    symbol: class ORCA_GETTERMHOLDINGRS_Type 
    location: class com.td.inv.model.COIRQ 
[ERROR] /D:/jenkins/workspace/CBAW/testP/WSW_Investment/src/main/java/com/td/inv/model/COIRQ.java:[69,66] cannot find symbol 
    symbol: class RPM_GETPLANACCOUNTOVERVIEWRS_Type 
    location: class com.td.inv.model.COIRQ 
[ERROR] /D:/jenkins/workspace/CBAW/testP/WSW_Investment/src/main/java/com/td/inv/model/COIRQ.java:[70,25] cannot find symbol 
    symbol: class ORCA_GETTERMINSTRUCTIONRS_Type 
    location: class com.td.inv.model.COIRQ 
[ERROR] /D:/jenkins/workspace/CBAW/testP/WSW_Investment/src/main/java/com/td/inv/wss/util/RPMInvoker.java:[5,26] package javax.ws.rs.client does not exist 
[ERROR] /D:/jenkins/workspace/CBAW/testP/WSW_Investment/src/main/java/com/td/inv/wss/util/RPMInvoker.java:[6,26] package javax.ws.rs.client does not exist 
[ERROR] /D:/jenkins/workspace/CBAW/testP/WSW_Investment/src/main/java/com/td/inv/wss/util/RPMInvoker.java:[7,26] package javax.ws.rs.client does not exist 
[ERROR] /D:/jenkins/workspace/CBAW/testP/WSW_Investment/src/main/java/com/td/inv/wss/util/RPMInvoker.java:[8,26] package javax.ws.rs.client does not exist 
[ERROR] /D:/jenkins/workspace/CBAW/testP/WSW_Investment/src/main/java/com/td/inv/wss/util/RPMInvoker.java:[9,24] package javax.ws.rs.core does not exist 
[ERROR] /D:/jenkins/workspace/CBAW/testP/WSW_Investment/src/main/java/com/td/inv/wss/util/RPMInvoker.java:[15,26] package com.rpmtec.current does not exist 
[ERROR] /D:/jenkins/workspace/CBAW/testP/WSW_Investment/src/main/java/com/td/inv/wss/util/RPMInvoker.java:[16,26] package com.rpmtec.current does not exist 
[ERROR] /D:/jenkins/workspace/CBAW/testP/WSW_Investment/src/main/java/com/td/inv/wss/util/RPMInvoker.java:[23,57] cannot find symbol 
    symbol: class AbstractRequestMessageData_Type 
    location: class com.td.inv.wss.util.RPMInvoker 
[ERROR] /D:/jenkins/workspace/CBAW/testP/WSW_Investment/src/main/java/com/td/inv/wss/util/RPMInvoker.java:[24,41] cannot find symbol 
    symbol: class AbstractResponseMessageData_Type 
    location: class com.td.inv.wss.util.RPMInvoker 
[ERROR] /D:/jenkins/workspace/CBAW/testP/WSW_Investment/src/main/java/com/td/inv/wss/application/InvestmentAPI.java:[4,19] package javax.ws.rs does not exist 
[ERROR] /D:/jenkins/workspace/CBAW/testP/WSW_Investment/src/main/java/com/td/inv/wss/application/InvestmentAPI.java:[5,24] package javax.ws.rs.core does not exist 
[ERROR] /D:/jenkins/workspace/CBAW/testP/WSW_Investment/src/main/java/com/td/inv/wss/application/InvestmentAPI.java:[9,36] cannot find symbol 
    symbol: class Application 

यहाँ मेरी माता पिता पोम है

यहां बताया गया है कि मैंने माता-पिता पीओएम से बच्चे पीओएम में निर्भरता प्राप्त करने का प्रयास किया:

<dependencyManagement> 
    <dependencies> 
    <dependency> 
     <groupId>group1</groupId> 
     <artifactId>group1-artifact</artifactId> 
     <version>1.0.1</version> 
     <type>pom</type> 
     <scope>import</scope> 
    </dependency> 
    </dependencies> 
</dependencyManagement> 

यदि मैं बच्चे पीओएम में वही निर्भरता डालता हूं, तो यह पूरी तरह से काम करता है। मैं जेनकींस का उपयोग करके नेक्सस में तैनाती के लिए clean install स्थापित करने और deploy के लिए करता हूं। मैं maven-3.3.9 का उपयोग कर रहा हूँ। जेनकींस में, मैंने गिट से दो अलग-अलग मेवेन परियोजनाओं में माता-पिता और बाल पोम्स पढ़े हैं। मैं माता-पिता पीओएम से सभी निर्भरताओं और प्लगइन का वारिस करना चाहता हूं। क्या यह संभव है?

उत्तर

19

आपको यह प्राप्त करने के लिए <dependencies> अनुभाग के तहत उन निर्भरताओं की घोषणा करनी चाहिए जिन्हें आप उत्तराधिकारी बनाना चाहते हैं। <dependencyManagement> उन परिभाषाओं के लिए उपयोग किया जाता है जिन्हें किसी भी विशेष बच्चे के <dependencies> के भीतर प्रभावी होने के बाद, जब भी आवश्यक हो, संदर्भित किया जाना चाहिए।

अद्यतन: जब निर्भरता कि हर बच्चे पोम प्राप्त कर लेंगे घोषित सावधान रहें। बहुत जल्दी आप उन निर्भरताओं को समाप्त कर सकते हैं जिनकी आपको वास्तव में आवश्यकता नहीं है क्योंकि उन्हें माता-पिता में घोषित किया जाता है। जैसा कि अन्य टिप्पणीकारों द्वारा उल्लेख किया गया है, <dependencyManagement> बेहतर विकल्प हो सकता है, हालांकि यह मूल रूप से आप नहीं चाहते थे।

+0

आपका मतलब है कि, माता-पिता पोम में मुझे <निर्भरता> टैग के भीतर सभी निर्भरताओं को घोषित करना चाहिए, या बच्चे के पोम में नहीं? मैंने मूल निर्भरता में टैग के भीतर सभी निर्भरताओं को रखा है। क्या यही समस्या है? – Cherry

+0

यदि आपका लक्ष्य सभी बच्चों के पोम्स को विशेष निर्भरताओं का वारिस करना है, तो उन्हें प्रत्येक बच्चे में उन्हें कम करने की आवश्यकता के बिना - फिर हां, आपको उन्हें '<निर्भरता>' के भीतर घोषित करना चाहिए और '<निर्भरता प्रबंधन>' नहीं। दूसरी तरफ, '<निर्भरता प्रबंधन>' के भीतर घोषित एक निर्भरता केवल तभी उपयोग की जा सकती है जब आपको इसे बच्चे के पोम में चाहिए - आप बस उस बच्चे के 'निर्भरता>' के अंदर अपना समूह और आर्टिफैक्ट लिखते हैं। लाभ यह है कि अन्य गुण (संस्करण) माता-पिता में केवल एक बार घोषित किए जाते हैं। – vempo

+0

धन्यवाद। हां, मेरा लक्ष्य बाल निर्भरताओं के लिए विशेष निर्भरताओं का उत्तराधिकारी होना है। बस यह सुनिश्चित करने के लिए, आपके उत्तर के अनुसार मैं उन विशेष निर्भरताओं को <निर्भरता> (<निर्भरता प्रबंधन> टैग में नहीं) में मूल पोम में रखूंगा, है ना? – Cherry

8

वास्तव में, आपको समस्या से निपटने के 2 तरीके हैं।

  1. या तो आप <dependencyManagement /> नोड के अंतर्गत माता पिता पोम में निर्भरता कारक और प्रत्येक बच्चे है कि यह आवश्यकता है में, <dependencies /> नोड में निर्भरता जोड़ें। आप निर्भरता के संस्करण को सेट न करना चुन सकते हैं।
  2. या आप <dependencies /> नोड में पैरेंट पोम में निर्भरता घोषित करते हैं, और प्रत्येक बच्चे को निर्भरता से लाभ होगा।

इसलिए उदाहरण के लिए, यदि आप माता-पिता पोम में यह घोषणा करते हैं:

<dependencies> 
    <dependency> 
     <groupId>org.slf4j</groupId> 
     <artifactId>slf4j-api</artifactId> 
     <version>1.7.21</version> 
    </dependency> 
</dependencies> 
<dependencyManagement> 
    <dependencies> 
     <dependency> 
      <groupId>org.slf4j</groupId> 
      <artifactId>slf4j-simple</artifactId> 
      <version>1.7.21</version> 
      <scope>runtime</scope> 
     </dependency> 
    </dependencies> 
</dependencyManagement> 

फिर slf4j-api सभी बच्चों के लिए निर्भरता हो जाएगा। हालांकि, अगर आप बच्चे के पोम में slf4j-simple पर निर्भरता को जोड़ना होगा, यह उसके लिए आवश्यक चाहिए:

<dependencies> 
    <dependency> 
     <group>org.slf4j</group> 
     <artifactId>slf4j-simple</artifactId> 
    </dependency> 
</dependencies> 

प्लगइन्स के लिए, यह एक ही काम करता है, लेकिन <pluginManagement /> और <plugins /> नोड्स के साथ। सभी कॉन्फ़िगरेशन प्लगइन की मूल पोम की परिभाषा में जा सकते हैं, और आप बस अपने बच्चे के पोम के <build /> अनुभाग में प्लगइन घोषित करते हैं।

+0

धन्यवाद:

बच्चे पोम इस प्रकार होगी। लेकिन निर्भरता के संस्करण को सेट किए बिना, <निर्भरता /> नोड में बाल पोम में निर्भरता को जोड़ने के बिना मैं माता-पिता के पोम से निर्भरताओं का वारिस नहीं कर सकता हूं, है ना? – Cherry

+0

मैंने अपना जवाब अपडेट किया क्योंकि यह सटीक नहीं था। यह पता चला है कि यदि आप उन्हें माता-पिता पोम के '<निर्भरता />' नोड में जोड़ते हैं तो आपको बच्चे के पोम में निर्भरता जोड़ने की आवश्यकता नहीं होगी। ये तुम्हारी पसंद है। –

+1

जबकि आप निश्चित रूप से ऐसा कर सकते हैं, '<निर्भरता प्रबंधन />' के बाहर एक मूल पोम में '<निर्भरता />' रखना शायद ही कभी अच्छा विचार है। आपके सभी बच्चे मॉड्यूल हर समय इन सभी निर्भरताओं का वारिस करेंगे। आपके मॉड्यूल में से किसी एक का उपभोग करने वाली कोई अन्य परियोजनाएं भी इन सभी deps और संभवतः संघर्ष या बदतर हो सकती हैं, खासकर यदि यह बच्चा मॉड्यूल उन सभी का उपयोग नहीं करता है। @AththurNoseda द्वारा मूल समाधान सबसे अच्छा है। –

3

नीचे उदाहरण है कि आपको माता-पिता और बाल पोम्स का उपयोग कैसे करना चाहिए।

..... 
<modelVersion>4.0.0</modelVersion> 
<groupId>group1</groupId> 
<artifactId>group1-artifact</artifactId> 
<version>1.0.1</version> 
<packaging>pom</packaging> 

<modules> 
    <module>child1</module> 
</modules> 

<dependencyManagement> 
    <dependencies> 
     <dependency> 
      <groupId>org.slf4j</groupId> 
      <artifactId>slf4j-simple</artifactId> 
      <version>1.7.21</version> 
     </dependency> 
     <dependency> 
      <groupId>org.abc</groupId> 
      <artifactId>xyz</artifactId> 
      <version>1.0.0</version> 
     </dependency> 
    </dependencies> 
</dependencyManagement> 
....... 

आप dependencyManagement टैग में एक निर्भरता निर्दिष्ट करते हैं, यह का अर्थ है कि आप बच्चे को पोम के लिए इस जार उपलब्ध करा रहे हैं:

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

..... 
<modelVersion>4.0.0</modelVersion> 

<parent>   // this is how you will inherit from parent pom 
    <groupId>group1</groupId> 
    <artifactId>group1-artifact</artifactId> 
    <version>1.0.1</version> 
</parent> 

<groupId>child1</groupId> 

    <dependencies> 
     <dependency> 
      <groupId>org.slf4j</groupId> 
      <artifactId>slf4j-simple</artifactId> 
      <scope>runtime</scope> 
      // no version needed as it would inherit from the parent pom 
     </dependency> 
     <dependency> 
      <groupId>org.abc</groupId> 
      <artifactId>xyz</artifactId> 
      // no version needed as it would inherit from the parent pom 
     </dependency> 
    </dependencies> 

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