2010-04-23 21 views
10

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

<plugin> 
<groupId>org.apache.maven.plugins</groupId> 
<artifactId>maven-assembly-plugin</artifactId> 
<configuration> 
    <descriptorRefs> 
    <descriptorRef>bin</descriptorRef> 
    </descriptorRefs> 
</configuration> 
</plugin> 

हालांकि, जब mvn विधानसभा चल: विधानसभा, पैरेंट फ़ोल्डर से एकमात्र स्रोत (खाली) शामिल किए गए हैं मेरे माता पिता पोम के अंदर, मैं निम्नलिखित प्लगइन की घोषणा की। मैं अपने मॉड्यूल से स्रोतों में संग्रह कैसे शामिल करूं?

+0

आप एक रास्ता मिल गया है? – aurelius

उत्तर

0

पूर्वनिर्धारित bin यहां चाल नहीं करेगा। आपको पूर्वनिर्धारित bin डिस्क्रिप्टर के समान कस्टम डिस्क्रिप्टर का उपयोग करना होगा, लेकिन यह आपके प्रोजेक्ट मॉड्यूल को शामिल करने के लिए moduleSet घोषित करता है।

6

मुझे लगता है कि आप Maven शेड प्लगइन के लिए देख रहे हैं:

http://maven.apache.org/plugins/maven-shade-plugin/index.html

एक uber पैकेज depenency में निर्भरता के किसी भी संख्या संकुल अप। इसे फिर एक भंडार में तैनात किया जा सकता है।

+0

अन्य बाल परियोजनाओं के आधार पर एक बाल परियोजना जोड़ना (सुनिश्चित करें कि वे सभी शामिल हैं) चाल है। छाया घोषित करें: बाल प्रोजेक्ट में छाया निष्पादन, एक एकल के साथ कॉन्फ़िगर किया गया है जिसमें बहु-मॉड्यूल समूह के अंतर्गत सभी कलाकृतियों के लिए शामिल है। विवरण के लिए http://maven.apache.org/plugins/maven-shade-plugin/examples/includes-excludes.html देखें। –

1

एक भी जार मैं निम्नलिखित किया था करने के लिए सभी मॉड्यूल से कक्षाएं पैकेज के लिए:

  1. बनाया गया अतिरिक्त मॉड्यूल है कि केवल एक ही जार करने के लिए अन्य सभी मॉड्यूल की सामग्री को पैकिंग के लिए प्रयोग किया जाता है। इसे आमतौर पर असेंबली मॉड्यूल के रूप में अस्वीकार किया जाता है। इस मॉड्यूल को लक्षित जार फ़ाइल के रूप में कॉल करने का प्रयास करें।

  2. इस नए मॉड्यूल के pom.xml में मैंने मैवेन-एसेम्बी-प्लगइन जोड़ा। यह प्लगइन सभी वर्गों को संकुल करता है और उन्हें एकल फ़ाइल में रखता है। यह अतिरिक्त विन्यास फाइल (चरण 4.)

<build> 
    <plugins> 
     <plugin> 
     <artifactId>maven-assembly-plugin</artifactId> 
     <version>2.4</version> 
     <executions> 
      <execution> 
      <id>go-framework-assemby</id> 
      <phase>package</phase><!-- create assembly in package phase (invoke 'single' goal on assemby plugin)--> 
      <goals> 
       <goal>single</goal> 
      </goals> 
      <configuration> 
       <descriptors> 
       <descriptor>src/main/assemble/framework_bin.xml</descriptor> 
       </descriptors> 
        <finalName>framework</finalName> 
        <appendAssemblyId>false</appendAssemblyId> 
      </configuration> 
      </execution> 
     </executions> 
     </plugin> 
    </plugins> 
    </build> 

3.In इस नए मॉड्यूल मैं भी माता पिता पोम सहित अन्य सभी मॉड्यूल के लिए उनकी निर्भरता जोड़ा की pom.xml उपयोग करता है। निर्भरताओं में शामिल केवल मॉड्यूल लक्ष्य जार फ़ाइल में पैक किए जाएंगे।

<dependencies> 
    <dependency> 
     <groupId>${project.groupId}</groupId> 
     <artifactId>fwk-bam</artifactId> 
     <version>${project.version}</version> 
    </dependency>... 

4.Finally मैं विधानसभा मॉड्यूल में विधानसभा वर्णनकर्ता बनाया (फ़ाइल: src/मुख्य/इकट्ठा/framework_bin.xml)

<assembly 
    xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd"> 
    <id>all-jar</id> 
    <formats> 
     <format>jar</format> <!-- the result is a jar file --> 
    </formats> 

    <includeBaseDirectory>false</includeBaseDirectory> <!-- strip the module prefixes --> 

    <dependencySets> 
     <dependencySet> 
      <unpack>true</unpack> <!-- unpack , then repack the jars --> 
      <useTransitiveDependencies>false</useTransitiveDependencies> <!-- do not pull in any transitive dependencies --> 
     </dependencySet> 
    </dependencySets> 
</assembly> 
संबंधित मुद्दे