2009-09-30 13 views
20

मेवेन गुरुओं को वहां बनाने के लिए: मैं गैर-जावा परियोजना कलाकृतियों (.NET) को एक ज़िप फ़ाइल में पैकेज करने की कोशिश कर रहा हूं।मेवेन फ्लैट ज़िप विधानसभा

अगर मैं अपने पोम पैकेजिंग बदलने <packaging>zip</packaging> ज़िप करने, मैं इस त्रुटि संदेश मिलता है: - मैं इसे <packaging>pom</packaging> करने के लिए बदल बेकार जार है कि अन्यथा बनाया से छुटकारा पाने के [INFO] Cannot find lifecycle mapping for packaging: 'zip'. Component descriptor cannot be found in the component repository: org.apache.mav en.lifecycle.mapping.LifecycleMappingzip. ठीक है, कोई बड़ी बात नहीं मैं 2 समस्या आ रही है लक्ष्य डीआईआर

मेरी मुख्य समस्या यह है कि मैं ज़िप में पैकेजिंग कर रहा हूं फ़ाइलों को कुछ निर्देशिकाओं में घोंसला दिया जाता है लेकिन मुझे इन्हें ज़िप की शीर्ष निर्देशिका में रखना होगा। यहाँ मेरी विधानसभा फ़ाइल है:

<assembly> 
    <id>bin</id> 
    <formats> 
    <format>zip</format> 
    </formats> 
    <fileSets> 
    <fileSet> 
     <directory>${basedir}/${project.artifactId}</directory> 
     <includes> 
     <include>**/Bin/Release/*.dll</include> 
     <include>**/Bin/Release/*.pdb</include> 
     </includes> 
    </fileSet> 
    </fileSets> 
</assembly> 

जब मैं इस चलाने - मैं ज़िप फ़ाइल मिल जाएगा लेकिन फ़ाइलें सी के साथ शुरू नेस्ट किया जाएगा: \ पूरा पथ द्वारा पीछा किया। आप सुझाव देने के लिए - परियोजना यह निम्नलिखित संरचना ProjectFoo\ProjectFoo\subproject1\Bin\Release\foo.dll में बाइनरी है उदासीनता और मैं ZIP\foo.dll

यहाँ विधानसभा प्लगइन है विन्यास की जरूरत है:

<plugin> 
<artifactId>maven-assembly-plugin</artifactId> 
<configuration> 
    <descriptors> 
     <descriptor>assembly.xml</descriptor> 
    </descriptors> 
</configuration> 
<executions> 
    <execution> 
     <id>zip</id> 
     <phase>package</phase> 
     <goals> 
      <goal>single</goal> 
     </goals> 
    </execution> 
</executions> 

हो सकता है कि मैं सिर्फ antrun का उपयोग करें और चींटी जिप पर अमल करने की जरूरत है काम?

उत्तर

27

जैसा कि आपने देखा है, एक ज़िप पैकेजिंग प्रकार नहीं है, इसलिए आपके द्वारा चुने गए पोम पैकेजिंग का उपयोग करना समझ में आता है।

असेंबली प्लगइन की प्रसंस्करण में आपको एक छेद का सामना करना पड़ा है। आप <outputDirectory>/<outputDirectory> के साथ असेंबली में एकाधिक फ़ाइलसेट निर्दिष्ट करके इसे हल कर सकते हैं, प्रत्येक निर्देशिका के लिए एक जिसे आप शामिल करना चाहते हैं, यह स्पष्ट रूप से एक पिटा है, और शायद स्वीकार्य समाधान नहीं है।

सभी वैकल्पिक डीएलएल को एक स्टेजिंग निर्देशिका में कॉपी करने के लिए चींटी प्रतिलिपि कार्य का उपयोग करने का एक वैकल्पिक तरीका है, फिर उस निर्देशिका को असेंबली में शामिल करें।

निम्नलिखित विन्यास करना चाहिए के बाद आप क्या कर रहे हैं:

<assembly> 
    <id>bin</id> 
    <formats> 
    <format>zip</format> 
    </formats> 
    <fileSets> 
    <fileSet> 
     <directory>${project.build.directory}/dll-staging</directory> 
     <outputDirectory>/</outputDirectory> 
     <includes> 
     <include>*.dll</include> 
     <include>*.pdb</include> 
     </includes> 
    </fileSet> 
    </fileSets> 
</assembly> 
+0

मैं वास्तव में क्या जरूरत:

antrun-प्लगइन विन्यास:

<plugin> <artifactId>maven-antrun-plugin</artifactId> <version>1.3</version> <executions> <execution> <phase>process-resources</phase> <configuration> <tasks> <copy todir="${project.build.directory}/dll-staging"> <fileset dir="${basedir}/${project.artifactId}"> <include name="**/Bin/Release/*.dll"/> <include name="**/Bin/Release/*.pdb"/> </fileset> <flattenmapper/> </copy> </tasks> </configuration> <goals> <goal>run</goal> </goals> </execution> </executions> </plugin> 

विधानसभा! धन्यवाद अमीर! – Bostone

+0

आपका स्वागत है –

+0

हालांकि अभी भी एक समस्या है। ज़िप अभी भी "artifactId-Version" प्रकार की एक शीर्ष निर्देशिका बनाए रखता है। जब मैं ज़िप निकालता हूं तो मेरी सभी फाइलें '/' में नहीं बल्कि '/ Foo-1.0-SNAPSHOT /' में समाप्त होती हैं। फिर भी फ़ाइलों को सही ढंग से लक्ष्य/डीएल-स्टेजिंग – Bostone

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