2009-12-13 18 views
15

मैं कई जार मॉड्यूल के साथ एक maven2 परियोजना/XYZ/लक्ष्य/XYZ-xxxjarमेवेन जार में एक जार में मॉड्यूल जार कैसे विलय करें?

अब है, परियोजना का निर्माण निर्देशिका मॉड्यूल में प्रत्येक मॉड्यूल के लिए .jar अभिलेखागार मिल जाएगा, अपने प्रोजेक्ट पी संस्करण की है अगर पीपी .qr, और मैं एक एकल जार Pp.qr-all.jar उत्पन्न करना चाहता हूं जिसमें सभी उप-मॉड्यूल शामिल हैं, मुझे कैसे करना चाहिए?

उत्तर

18

जो आप प्राप्त करना चाहते हैं उसे uber jar कहा जाता है। इस मॉड्यूल में अन्य सभी submodules की निर्भरता है जो आप एक जार में पैकेज करना चाहते हैं। यदि आप एक और सबमिशन तैयार करते हैं जो वांछित आर्टिफैक्ट का उत्पादन करेगा, तो इसे अपनी सभी निर्भरताओं के साथ रिएक्टर में बनाया जा सकता है, लेकिन यदि यह एक अलग परियोजना होगी तो आपको सभी उबेर जार निर्भरताओं को स्थापित करना होगा।

| parent 
| -- submodule1 
... 
| -- submoduleN 
| -- uberjarSubmodule 

उबेर जार का उपयोग करके किया जा सकता है:

  1. maven-shade-plugin - आपके मामले में आप अपने मॉड्यूल

    <project> 
    ... 
    <build> 
    <plugins> 
        <plugin> 
        <groupId>org.apache.maven.plugins</groupId> 
        <artifactId>maven-shade-plugin</artifactId> 
        <version>1.2.2</version> 
        <executions> 
         <execution> 
         <phase>package</phase> 
         <goals> 
          <goal>shade</goal> 
         </goals> 
         <configuration> 
          <artifactSet> 
          <excludes> 
           <exclude>classworlds:classworlds</exclude> 
           <exclude>junit:junit</exclude> 
           <exclude>jmock:jmock</exclude> 
           <exclude>xml-apis:xml-apis</exclude> 
          </excludes> 
          </artifactSet> 
         </configuration> 
         </execution> 
        </executions> 
        </plugin> 
    </plugins> 
    </build> 
    ... 
    </project> 
    
  2. maven-assembly-plugin से सकर्मक dependecies बाहर करने के लिए याद करने के लिए है - this में प्रश्न आपको एक विस्तृत उत्तर मिलेगा

+0

छाया एक शांत प्लगइन की तरह दिखता है। – Clinton

1

इस पर निर्भर करता है कि आप इसे कैसे शिप करने जा रहे हैं, यदि आपका जार एक पुस्तकालय है जिसे आप अन्य डेवलपर्स को डाउनलोड करना और मैवेन के माध्यम से उपयोग करना चाहते हैं। आपको प्रोजेक्ट पोम में dependencies के रूप में निर्दिष्ट करना चाहिए।

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

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