2011-09-14 16 views
8

मैं निम्नलिखित कस्टम विधानसभा है:एक कस्टम विधानसभा वर्णनकर्ता के साथ प्रकट करने के लिए classpath जोड़े

<assembly> 
    <id>full</id> 
    <formats> 
     <format>jar</format> 
    </formats> 
    <includeBaseDirectory>false</includeBaseDirectory> 
    <fileSets> 
     <fileSet> 
      <directory>${project.build.outputDirectory}</directory> 
      <outputDirectory>/</outputDirectory> 
     </fileSet> 
    </fileSets> 
</assembly> 

और निम्न कॉन्फ़िगरेशन अनुभाग:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-assembly-plugin</artifactId> 
    <configuration> 
     <descriptors> 
      <descriptor>src/main/assembly/assembly.xml</descriptor> 
     </descriptors> 
     <archive> 
      <manifest> 
       <mainClass>com.example.MyExample</mainClass> 
       <addClasspath>true</addClasspath> 
       <classpathPrefix>./lib/</classpathPrefix> 
      </manifest> 
     </archive> 
    </configuration> 
    <executions> 
     <execution> 
      <phase>package</phase> 
      <goals> 
       <goal>single</goal> 
      </goals> 
     </execution> 
    </executions> 
</plugin> 

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

मैंने देखा कि कहीं किसी ने उल्लेख किया है कि संग्रह अनुभाग केवल जार प्रारूप के साथ उपलब्ध है, लेकिन यही वह है जिसका मैं उपयोग कर रहा हूं।

जब उन्होंने असेंबली को हटा दिया: असेंबली, क्या उन्होंने इसे सही तरीके से करने का एक नया तरीका परिभाषित किया? मुझे वास्तव में बहिष्कृत कार्यक्षमता का उपयोग करना पसंद नहीं है, लेकिन अगर वे काम करने के तरीके को तोड़ते हैं और सही तरीके से दस्तावेज नहीं करते हैं, तो मुझे वास्तव में यह नहीं पता कि इससे कैसे बचें।

क्या किसी के पास यह सही तरीके से करने का कोई उदाहरण है?

उत्तर

4

यह असेंबली प्लगइन का अच्छा उपयोग नहीं है। जावा जार-इन-जार नहीं करता है। आप अपने मुख्य जार के मैनिफेस्ट में क्लासपाथ जोड़ने के लिए मेवेन-जार-प्लगइन के कॉन्फ़िगरेशन विकल्पों का उपयोग कर सकते हैं और फिर अपनी निर्भरताओं को इकट्ठा करने के लिए असेंबली प्लगइन का उपयोग कर सकते हैं और फिर अपने मुख्य जार के बगल में एक ज़िप या टैरबॉल में छोड़ सकते हैं।

http://maven.apache.org/shared/maven-archiver/examples/classpath.html

+0

मैंने बाद में जार से निर्भरताओं को हटा दिया है और उन्हें जार के साथ एक lib फ़ोल्डर में रख रहा हूं। हालांकि, समस्या अभी भी बनी हुई है। असेंबली प्लगइन क्लासपाथ निर्दिष्ट के रूप में नहीं जोड़ता है। – davija

+0

ऐसा नहीं माना जाता है। जार प्लगइन में वह काम है। – bmargulies

+3

असेंबली प्लगइन पर प्रलेखन के अनुसार, यदि आप इसे क्लासपाथ जोड़ने के लिए कहते हैं तो यह करता है। यह अन्य लक्ष्यों में काम करता है जो अब बहिष्कृत हैं। दस्तावेज़ों की जांच करें – davija

2

आप Maven जार प्लगइन का उपयोग करना चाहिए:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-jar-plugin</artifactId> 
    <configuration> 
     <archive> 
      <manifest> 
       <mainClass>main class</mainClass> 
       <addClasspath>true</addClasspath> 
       <classpathPrefix>lib/</classpathPrefix> 
      </manifest> 
     </archive> 
    </configuration> 
</plugin> 
2

maven-assembly-plugin संस्करण 2.5 या नए के लिए अद्यतन करने की कोशिश करो।

मैनिफेस्ट फ़ाइल में प्रवेश क्लास-पथ की अप्रत्याशित अनुपस्थिति बग MASSEMBLY-576 के कारण हुई है। बग प्लगइन के संस्करण 2.5 में तय किया गया था (26 अक्टूबर 2014 को जारी)।

+0

मदद नहीं की, 2.5 क्लास-पथ में अपग्रेड किया गया अभी भी गायब है :( – sloven