असल में, मैंने यह नहीं देखा कि maven-shade-plugin
वास्तव में (या कोई अन्य प्लगइन) कर रहा है क्योंकि मैवेन 2 में मेगाजर या उबेरजर बनाने के लिए सब कुछ बनाया गया है। आपको केवल पूर्वनिर्धारित jar-with-dependencies
डिस्क्रिप्टर के साथ मेवेन-असेंबली-प्लगइन का उपयोग करना होगा। फिर
mvn assembly:assembly -DdescriptorId=jar-with-dependencies
लेकिन,, इस वर्णनकर्ता के डिफ़ॉल्ट व्यवहार है:
बस अपने pom.xml
को यह स्निपेट जोड़ने प्रकट अनुकूलित करने के लिए:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>my.package.to.my.MainClass</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
और निम्न आदेश अपने uberjar उत्पन्न होगा निर्भरताओं को अनपैक करने के लिए (मैवेन-शेड-प्लगइन की तरह)। ईमानदार होने के लिए, मुझे नहीं लगता कि यह एक समस्या क्यों है, लेकिन यदि यह वास्तव में आप नहीं चाहते हैं, तो आप अपने स्वयं के कस्टम असेंबली डिस्क्रिप्टर का उपयोग कर सकते हैं।
पहले ऐसा करने के लिए, अपने विधानसभा वर्णनकर्ता बनाने के लिए, के निम्नलिखित सामग्री के साथ src/assembly/uberjar.xml
कहते हैं, करते हैं:
<assembly>
<id>uberjar</id>
<formats>
<format>jar</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>
<dependencySets>
<dependencySet>
<unpack>false</unpack>
<scope>runtime</scope>
<useProjectArtifact>false</useProjectArtifact>
</dependencySet>
</dependencySets>
<fileSets>
<fileSet>
<directory>${project.build.outputDirectory}</directory>
<outputDirectory>/</outputDirectory>
</fileSet>
</fileSets>
</assembly>
फिर, Maven-विधानसभा-प्लगइन कॉन्फ़िगर इस वर्णनकर्ता उपयोग करने के लिए और करने के लिए निर्भरता को जोड़ने के लिए प्रकट की Class-Path
प्रविष्टि:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<descriptors>
<descriptor>src/assembly/uberjar.xml</descriptor>
</descriptors>
<archive>
<manifest>
<mainClass>my.package.to.my.MainClass</mainClass>
<addClasspath>true</addClasspath>
</manifest>
</archive>
</configuration>
<!--
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
-->
</plugin>
अंत में mvn assembly:assembly
चलाने के लिए अपनी uberjar निर्माण करने के लिए।
वैकल्पिक रूप से executions
तत्व package
चरण पर असेंबली प्लगइन को बांधने के लिए असम्बद्ध करें (और सामान्य निर्माण के हिस्से के रूप में निर्मित असेंबली है)।
+1, बेहद सहायक उत्तर। मैं कल्पना कर सकता हूं कि कुछ सॉफ्टवेयर उत्पादक, विशेष रूप से ओएस के बाहर, उनके उत्पाद को "डिस्सेम्बलिंग/रिवर्स इंजीनियरिंग" से मना कर सकते हैं, या उनके पैकेजिंग को फ़ाइल नाम इत्यादि के साथ बनाए रखा जा सकता है। –
असेंबली: असेंबली को असेंबली द्वारा प्रतिस्थापित किया गया है : हाल ही में एकल। (मैं असेंबली-प्लगइन संस्करण 2.3 पर हूं) –
असेंबली प्लगइन छाया प्लगइन की तरह एक प्लगइन है, इसलिए यह "निर्माण" नहीं है –