2015-10-22 9 views
6

मेरे पास अभिभावक नामक एक प्रोजेक्ट है। इसका प्रकार पीओएम है।बाल मॉड्यूल में मूल परियोजना लाइब्रेरी (जार) तक पहुंचने में असमर्थ - मेवेन

<project> 
    <modelVersion>4.0.0</modelVersion> 

    <groupId>com.Parent</groupId> 
    <artifactId>Parent</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
    <packaging>pom</packaging> 

    <modules> 
     <module>childModule</module> 
    </modules> 

    <dependencies> 
     <dependency> 
      <groupId>com.oracle</groupId> 
      <artifactId>ojdbc</artifactId> 
      <version>6</version> 
      <scope>system</scope> 
      <systemPath>${basedir}/lib/ojdbc6.jar</systemPath> 
     </dependency> 
    </dependencies> 

    <repositories> 
     <repository> 
      <id>in-project</id> 
      <name>In Project Repo</name> 
      <url>file://${basedir}/lib</url> 
     </repository> 
    </repositories> 

अब बच्चे परियोजना के नाम बाल-Module1 हैं: वहाँ एक पुस्तकालय (ojdbc6.jar) कि सार्वजनिक भंडार में उपलब्ध नहीं है तो मैं यह <SystemPath> के द्वारा एक्सेस कर रहा हूँ के रूप में आप pom.xml नीचे में देख सकते हैं और बाल-Module2 उपयोग इस (ojdbc6.jar) पुस्तकालय यह पोम है नीचे उल्लेख किया गया है:

<project> 
    <modelVersion>4.0.0</modelVersion> 

    <artifactId>testApp</artifactId> 
    <version>1.14.5.1-SNAPSHOT</version> 
    <packaging>war</packaging> 
    <name>APP1</name> 
    <description>Application</description> 

    <parent> 
     <groupId>com.Parent</groupId> 
     <artifactId>Parent</artifactId> 
     <version>0.0.1-SNAPSHOT</version> 
    </parent> 
</project> 

जब मैं मेवेन का उपयोग करता हूं तो यह मुझे त्रुटि देता है:

Description Resource Path Location Type 
The container 'Maven Dependencies' references non existing library 
'C:\Users\ABCCOMPUTER_NAME\.m2\repository\com\oracle\ojdbc\6\ojdbc-6.jar' 
testApp Build path Problem. 

यह स्थानीय भंडार में क्यों दिखता है? ऐसा तब होता है जब मूल प्रोजेक्ट में लाइब्रेरी (jar) होती है जिसमें सिस्टम पथ होता है। ऐसा तब नहीं होता जब एक्सेस सिस्टम पथ लाइब्रेरी (jar) एक ही प्रोजेक्ट में, जैसे माता-पिता ojdbc6.jar संदर्भित करते हैं, यह ठीक है।

+0

बच्चों के सापेक्ष स्थित जार कहाँ है? आधारकर्ता संपत्ति माता-पिता और बच्चों में अलग-अलग मूल्य है। –

+0

जार पैरेंट प्रोजेक्ट के सापेक्ष lib फ़ोल्डर में स्थित है और मैवेन निर्भरता जार को अपने मॉड्यूल में ट्राफर करता है। मैं मानता हूं कि मैवेन पूर्ण पथ के सापेक्ष रूपांतरित होता है जब इसमें बाल मॉड्यूल पर निर्भरता जार शामिल होता है। –

उत्तर

4

मैं जैसा कि नीचे दिखाया माता पिता pom.xml में systemPath अपडेट करके समस्या का समाधान हो pom.xml और भंडार

<properties> 
     <main.basedir>${project.basedir}</main.basedir> 
    </properties> 
<repositories> 
     <repository> 
      <id>in-project</id> 
      <name>In Project Repo</name> 
      <url>file://${main.basedir}/lib</url> 
     </repository> 
</repositories> 

फिर बाल मॉड्यूल में गुणों और रिपोजिटरी तत्वों को नीचे जोड़ना ("/ .." को बाल मॉड्यूल फ़ोल्डर के रूप में जोड़ा गया है जो मूल फ़ोल्डर में रहता है, इसलिए एक निर्देशिका ऊपर जाएं, फिर पैरेंट lib फ़ोल्डर के लिए पूर्ण पथ को अपेक्षित के रूप में उत्पन्न किया जाएगा):

<properties> 
     <main.basedir>${project.basedir}/..</main.basedir> 
    </properties> 
<repositories> 
      <repository> 
       <id>in-project</id> 
       <name>In Project Repo</name> 
       <url>file://${main.basedir}/lib</url> 
      </repository> 
    </repositories> 
+0

[यह उत्तर] (http://stackoverflow.com/questions/1012402/maven2-property-that-indicates-the --parent-directory) इस मुद्दे को समझने में मेरी सहायता करें लेकिन इसके जवाब ने मेरी समस्या का समाधान नहीं किया है इसलिए मैंने कुछ आर एंड डी किया और ऊपर उल्लिखित समाधान के साथ आया। –

0

से:

<systemPath>${main.basedir}/lib/ojdbc6.jar</systemPath> 

और उसके बाद माता-पिता में main.basedir संपत्ति जोड़ने: https://stackoverflow.com/a/2230464/1490322

Finally, declare it like any other dependency (but without the system scope):

<dependency> 
    <groupId>your.group.id</groupId> 
    <artifactId>3rdparty</artifactId> 
    <version>X.Y.Z</version> 
</dependency> 
+0

आपके द्वारा उल्लेखित उत्तर में कोई कमी है, मुझे आश्चर्य है कि लोग इसकी सराहना क्यों करते हैं। जब आप किसी भी यानी एसवीएन रिपोजिटरी को प्रोजेक्ट करते हैं ताकि अन्य डेवलपर्स प्रोजेक्ट प्राप्त कर सकें और उन्हें एक्सेस कर सकें। उन्हें svn install bla bla कमांड चलाने की आवश्यकता है .. (वहां स्थानीय रिपो में प्रतिबद्ध होने के लिए) और यदि कई गैर-ग्लोबल-रेपो जार हैं तो यह समय लेने वाला कार्य है। –

+0

यह बहु-मॉड्यूल बिल्ड के साथ काम नहीं करता है, और ओपी का प्रश्न पहले से ही इस रणनीति की कुछ समझ को दर्शाता है –

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