सवाल मैवेन का उपयोग कर निर्भरताओं के साथ मैं एक निष्पादन योग्य जेएआर कैसे बना सकता हूं?


मैं वितरण के लिए एक एकल निष्पादन योग्य जेएआर में अपनी परियोजना को पैकेज करना चाहता हूं।

मैं अपने आउटपुट जेएआर में सभी निर्भरता जेएआरएस मेवेन प्रोजेक्ट पैकेज कैसे बना सकता हूं?


1944
2018-02-22 08:43


मूल


कृपया उस निर्भरता प्लगइन का कौन सा लक्ष्य बता रहे हैं जिसका आप जिक्र कर रहे हैं। मुझे कोई लक्ष्य नहीं पता है जो मूल प्रश्न अनुरोध करता है: सभी निर्भरताओं को या तो ए) लेखकों जार के अंदर मरम्मत के माध्यम से, या बी) एक निष्पादन योग्य जार बनाएं जिसमें दूसरों को MANIFEST.MF के क्लासपाथ में शामिल किया गया हो। - Matthew McCullough
आपको यह उपयोगी मिल सकता है rationaljava.com/2015/02/... - Dan
2 उदाहरण: tugay.biz/2015/12/a-standalone-java-web-application-with.html  tugay.biz/2016/11/how-did-i-create-executable-jar-with.html - Koray Tugay
देखें stackoverflow.com/questions/35217128/... - Thanga


जवाब:


<build>
  <plugins>
    <plugin>
      <artifactId>maven-assembly-plugin</artifactId>
      <configuration>
        <archive>
          <manifest>
            <mainClass>fully.qualified.MainClass</mainClass>
          </manifest>
        </archive>
        <descriptorRefs>
          <descriptorRef>jar-with-dependencies</descriptorRef>
        </descriptorRefs>
      </configuration>
    </plugin>
  </plugins>
</build>

और आप इसे साथ चलाते हैं

mvn clean compile assembly:single

संकलन लक्ष्य असेंबली से पहले जोड़ा जाना चाहिए: एकल या अन्यथा अपनी परियोजना पर कोड शामिल नहीं है।

टिप्पणियों में और विवरण देखें।


आम तौर पर यह लक्ष्य स्वचालित रूप से निष्पादित करने के लिए एक बिल्ड चरण से जुड़ा होता है। यह सुनिश्चित करता है कि निष्पादित होने पर जेएआर बनाया गया है mvn install या एक तैनाती / रिलीज प्रदर्शन।

<plugin>
  <artifactId>maven-assembly-plugin</artifactId>
  <configuration>
    <archive>
      <manifest>
        <mainClass>fully.qualified.MainClass</mainClass>
      </manifest>
    </archive>
    <descriptorRefs>
      <descriptorRef>jar-with-dependencies</descriptorRef>
    </descriptorRefs>
  </configuration>
  <executions>
    <execution>
      <id>make-assembly</id> <!-- this is used for inheritance merges -->
      <phase>package</phase> <!-- bind to the packaging phase -->
      <goals>
        <goal>single</goal>
      </goals>
    </execution>
  </executions>
</plugin>

1866
2017-12-01 10:46



धन्यवाद @IAdapter। ध्यान दें कि आपको हमेशा हाथ से संकलन करना चाहिए क्योंकि यह जार में "लक्ष्य / कक्षाओं" में जो भी है, उसे रखेगा। इससे यह सुनिश्चित होगा कि जेएआर में हाल ही में स्रोत कोड में किए गए कोई भी बदलाव शामिल हैं। तो, आपको कुछ ऐसा करना चाहिए: mvn clean compile assembly:single। - Michael
मैंने चरण बाध्यकारी शामिल करने के लिए प्रश्न संपादित किया है। मैंने बहिष्कृत असेंबली लक्ष्य को हटा दिया, क्योंकि किसी को इसके बारे में जानने की जरूरत नहीं है। - Duncan Jones
मैं देखता हूं कि यह जार को उबेर जार में नहीं जोड़ता है, बल्कि यह सभी वर्ग फ़ाइलों को जार में जोड़ता है। - pitchblack408
युक्ति: आप तत्व भी जोड़ सकते हैं <appendAssemblyId>false</appendAssemblyId> में configuration नाम से परेशान "-जर-निर्भरता" प्रत्यय से बचने के लिए - maxivis
भूल जाओ compile और आप खराब हो गए हैं। - prayagupd


आप पैकेज निर्भरता से पहले एक अलग निर्देशिका में सभी निर्भरताओं को उत्पन्न करने के लिए निर्भरता-प्लगइन का उपयोग कर सकते हैं और उसके बाद मेनिफेस्ट के क्लासपाथ में शामिल कर सकते हैं:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-dependency-plugin</artifactId>
    <executions>
        <execution>
            <id>copy-dependencies</id>
            <phase>prepare-package</phase>
            <goals>
                <goal>copy-dependencies</goal>
            </goals>
            <configuration>
                <outputDirectory>${project.build.directory}/lib</outputDirectory>
                <overWriteReleases>false</overWriteReleases>
                <overWriteSnapshots>false</overWriteSnapshots>
                <overWriteIfNewer>true</overWriteIfNewer>
            </configuration>
        </execution>
    </executions>
</plugin>
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <configuration>
        <archive>
            <manifest>
                <addClasspath>true</addClasspath>
                <classpathPrefix>lib/</classpathPrefix>
                <mainClass>theMainClass</mainClass>
            </manifest>
        </archive>
    </configuration>
</plugin>

वैकल्पिक रूप से उपयोग करें ${project.build.directory}/classes/lib सभी जार-फाइलों को मुख्य जार में एकीकृत करने के लिए आउटपुट डायरेक्टरी के रूप में, लेकिन फिर आपको जार लोड करने के लिए कस्टम क्लासलोडिंग कोड जोड़ना होगा।


294
2018-06-02 03:01



+1 उत्कृष्ट। मैवेन-असेंबली-प्लगइन के बजाय मैवेन-निर्भरता-प्लगइन के साथ जाने का कारण यह है कि मैं बिल्डनंबर-मेवेन-प्लगइन का भी उपयोग कर रहा हूं, और इस तरह मैं प्रत्येक जार के मैनिफेस्ट में संस्करण संख्या को अलग-अलग स्टोर कर सकता हूं। - PapaFreud
मुझे आपका समाधान पसंद है। मैं उपयोग करता हूं ${project.build.directory}/classes/lib जैसा outputDirectory अंदर सभी निर्भरताओं के साथ एक मुख्य .jar है, लेकिन - इस जार को लोड करने के लिए कस्टम क्लासलोडिंग कोड कैसे जोड़ें? मुझे कार्य निष्पादन की आवश्यकता है जैसे: java -jar main-jar-with-deps.jar। क्या यह संभव है ? - marioosh
@ एंड्रे अरन्सन, मैंने जार के अंदर एक lib फ़ोल्डर में निर्भरताओं को जोड़ने के लिए इस समाधान का उपयोग किया, लेकिन मुझे हमेशा वर्ग को अपवाद नहीं मिला, क्या आप कृपया इसे ठीक करने के लिए सलाह दे सकते हैं। - Mahmoud Saleh
आपको +1 ऐसा लगता है कि मेवेन असेंबली प्लगइन 'जार-ऑन-निर्भरता' वास्तव में अच्छी तरह से काम नहीं करता है। मैं जेनरेटेड जार में मेटा-आईएनएफ / spring.schemas से कुछ प्रविष्टियों को याद कर रहा था। इसलिए मैंने जार-निर्भरता को तोड़ दिया और उपरोक्त आपके समाधान का उपयोग किया। बहुत बहुत धन्यवाद!!! - Derek
इस समस्या का सामना करने वाले किसी और के लिए, आपको अपने जार के साथ उसी निर्देशिका में lib फ़ोल्डर को शामिल करना होगा जहां कभी भी आप जार को परिवहन करते हैं। - Sparticles


मैंने ऐसा करने के कुछ अलग तरीकों के बारे में ब्लॉग किया।

देख Apache Maven के साथ निष्पादन योग्य जार (वर्डप्रेस)

या निष्पादन-जार-साथ-Maven-उदाहरण (GitHub)

टिप्पणियाँ

उन पेशेवरों और विपक्ष द्वारा प्रदान की जाती है स्टीफ़न


मैन्युअल परिनियोजन के लिए

  • पेशेवरों
  • विपक्ष
    • निर्भरता अंतिम जार से बाहर हैं।

एक विशिष्ट निर्देशिका में निर्भरता की प्रतिलिपि बनाएँ

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-dependency-plugin</artifactId>
  <executions>
    <execution>
      <id>copy-dependencies</id>
      <phase>prepare-package</phase>
      <goals>
        <goal>copy-dependencies</goal>
      </goals>
      <configuration>
        <outputDirectory>${project.build.directory}/${project.build.finalName}.lib</outputDirectory>
      </configuration>
    </execution>
  </executions>
</plugin>

जार निष्पादन योग्य और क्लासपाथ जागरूक बनाओ

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-jar-plugin</artifactId>
  <configuration>
    <archive>
      <manifest>
        <addClasspath>true</addClasspath>
        <classpathPrefix>${project.build.finalName}.lib/</classpathPrefix>
        <mainClass>${fully.qualified.main.class}</mainClass>
      </manifest>
    </archive>
  </configuration>
</plugin>

इस बिंदु पर jar वास्तव में बाहरी वर्गपाथ तत्वों के साथ निष्पादन योग्य है।

$ java -jar target/${project.build.finalName}.jar

तैनाती अभिलेखागार बनाओ

jar फ़ाइल केवल भाई के साथ निष्पादन योग्य है ...lib/ निर्देशिका। हमें निर्देशिका और इसकी सामग्री के साथ तैनात करने के लिए अभिलेखागार बनाने की आवश्यकता है।

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-antrun-plugin</artifactId>
  <executions>
    <execution>
      <id>antrun-archive</id>
      <phase>package</phase>
      <goals>
        <goal>run</goal>
      </goals>
      <configuration>
        <target>
          <property name="final.name" value="${project.build.directory}/${project.build.finalName}"/>
          <property name="archive.includes" value="${project.build.finalName}.${project.packaging} ${project.build.finalName}.lib/*"/>
          <property name="tar.destfile" value="${final.name}.tar"/>
          <zip basedir="${project.build.directory}" destfile="${final.name}.zip" includes="${archive.includes}" />
          <tar basedir="${project.build.directory}" destfile="${tar.destfile}" includes="${archive.includes}" />
          <gzip src="${tar.destfile}" destfile="${tar.destfile}.gz" />
          <bzip2 src="${tar.destfile}" destfile="${tar.destfile}.bz2" />
        </target>
      </configuration>
    </execution>
  </executions>
</plugin>

अब आपके पास है target/${project.build.finalName}.(zip|tar|tar.bz2|tar.gz) जिसमें प्रत्येक शामिल है jar तथा lib/*


अपाचे मेवेन असेंबली प्लगइन

  • पेशेवरों
  • विपक्ष
    • कोई कक्षा स्थानान्तरण समर्थन (क्लास स्थानांतरण की आवश्यकता होने पर मेवेन-शेड-प्लगइन का उपयोग करें)।
<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-assembly-plugin</artifactId>
  <executions>
    <execution>
      <phase>package</phase>
      <goals>
        <goal>single</goal>
      </goals>
      <configuration>
        <archive>
          <manifest>
            <mainClass>${fully.qualified.main.class}</mainClass>
          </manifest>
        </archive>
        <descriptorRefs>
          <descriptorRef>jar-with-dependencies</descriptorRef>
        </descriptorRefs>
      </configuration>
    </execution>
  </executions>
</plugin>

आपके पास target/${project.bulid.finalName}-jar-with-dependencies.jar


अपाचे मेवेन छाया प्लगइन

  • पेशेवरों
  • विपक्ष
<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-shade-plugin</artifactId>
  <executions>
    <execution>
      <goals>
        <goal>shade</goal>
      </goals>
      <configuration>
        <shadedArtifactAttached>true</shadedArtifactAttached>
        <transformers>
          <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
            <mainClass>${fully.qualified.main.class}</mainClass>
          </transformer>
        </transformers>
      </configuration>
    </execution>
  </executions>
</plugin>

आपके पास target/${project.build.finalName}-shaded.jar


onejar-Maven-प्लगइन

  • पेशेवरों
  • विपक्ष
    • 2012 से सक्रिय रूप से समर्थित नहीं है।
<plugin>
  <!--groupId>org.dstovall</groupId--> <!-- not available on the central -->
  <groupId>com.jolira</groupId>
  <artifactId>onejar-maven-plugin</artifactId>
  <executions>
    <execution>
      <configuration>
        <mainClass>${fully.qualified.main.class}</mainClass>
        <attachToBuild>true</attachToBuild>
        <!-- https://code.google.com/p/onejar-maven-plugin/issues/detail?id=8 -->
        <!--classifier>onejar</classifier-->
        <filename>${project.build.finalName}-onejar.${project.packaging}</filename>
      </configuration>
      <goals>
        <goal>one-jar</goal>
      </goals>
    </execution>
  </executions>
</plugin>

वसंत बूट मेवेन प्लगइन

  • पेशेवरों
  • विपक्ष
    • संभावित अनावश्यक वसंत और वसंत बूट संबंधित वर्ग जोड़ें।
<plugin>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-maven-plugin</artifactId>
  <executions>
    <execution>
      <goals>
        <goal>repackage</goal>
      </goals>
      <configuration>
        <classifier>spring-boot</classifier>
        <mainClass>${fully.qualified.main.class}</mainClass>
      </configuration>
    </execution>
  </executions>
</plugin>

आपके पास target/${project.bulid.finalName}-spring-boot.jar


134
2018-02-26 04:31



मेरे लिए काम करने वाला एकमात्र मैनुअल तैनाती है। - caiohamamura
@Caiohamamura आप क्लोन कर सकते हैं गिटहब रिपोजिटरी और देखें कि सभी प्रोफाइल कैसे काम करते हैं। - Jin Kwon
समस्या का उपयोग उस पैकेज के साथ था जिसका मैं उपयोग कर रहा था: stackoverflow.com/a/12622037/2548351 - caiohamamura


अनुत्तरित उत्तर देने और इसे सुधारने के लिए, हमारे पास है:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <configuration>
                <archive>
                    <manifest>
                        <addClasspath>true</addClasspath>
                        <mainClass>fully.qualified.MainClass</mainClass>
                    </manifest>
                </archive>
            </configuration>
        </plugin>
        <plugin>
            <artifactId>maven-assembly-plugin</artifactId>
            <configuration>
                <descriptorRefs>
                    <descriptorRef>jar-with-dependencies</descriptorRef>
                </descriptorRefs>
            </configuration>
        </plugin>
    </plugins>
</build>

इसके बाद, मैं स्पष्ट रूप से कॉल करने के बजाए इसे अपने निर्माण का एक प्राकृतिक हिस्सा बनाने की सलाह दूंगा। इसे अपने निर्माण का एक अभिन्न अंग बनाने के लिए, इस प्लगइन को अपने साथ जोड़ें pom.xml और इसे बांधो package जीवन चक्र घटना। हालांकि, एक गोचाचा है कि आपको कॉल करने की आवश्यकता है assembly:single लक्ष्य अगर इसे अपने pom.xml में डालते हैं, जबकि आप 'असेंबली: असेंबली' को कॉल करते हैं तो इसे कमांड लाइन से मैन्युअल रूप से निष्पादित करते हैं।

<project>
  [...]
  <build>
      <plugins>
          <plugin>
              <artifactId>maven-assembly-plugin</artifactId>
              <configuration>
                  <archive>
                      <manifest>
                          <addClasspath>true</addClasspath>
                          <mainClass>fully.qualified.MainClass</mainClass>
                      </manifest>
                  </archive>
                  <descriptorRefs>
                      <descriptorRef>jar-with-dependencies</descriptorRef>
                  </descriptorRefs>
              </configuration>
              <executions>
                  <execution>
                      <id>make-my-jar-with-dependencies</id>
                      <phase>package</phase>
                      <goals>
                          <goal>single</goal>
                      </goals>
                  </execution>
              </executions>
          </plugin>
      [...]
      </plugins>
    [...]
  </build>
</project>

122
2017-09-22 15:20



इस उत्तर में दृष्टिकोण का उपयोग करने से निम्नलिखित त्रुटि संदेश में परिणाम मिलता है: 'java file> jar फ़ाइल>' का उपयोग करके JAR चलाने की कोशिश करते समय <jar file> 'से मुख्य-श्रेणी मेनिफेस्ट विशेषता लोड करने में विफल - Elmo
मेवेन-जार-प्लगइन का पुरालेख भाग <archive> <manifest> <addClasspath> true </ addClasspath> <mainClass> fully.qualified.MainClass </ mainClass> </ manifest> </ archive> - RockyMM
क्षमा करें, यह उत्तर सादा गलत है, मुख्य क्लास टैग मेवेन-असेंबली-प्लगइन एंट्री पर होना चाहिए क्योंकि आप पैकेज लक्ष्य के दौरान कॉल कर रहे हैं - Alex Lehmann
@AlexLehmann सच है! - RockyMM
मैं आश्चर्यचकित हूं, क्यों pom.xml पहले से ही एमवीएन आर्केटाइप के बाद शामिल नहीं हो सकता है: कमांड उत्पन्न करें? जब मैं एक नया मैवेन प्रोजेक्ट बनाता हूं तो हर बार मैन्युअल रूप से कॉपी-पेस्ट करना परेशान करना है ... - wintermute


सभी निर्भरताओं को एक uber-jar में पैकेज करने के लिए मेवेन-शेड-प्लगइन का उपयोग करें। इसका उपयोग मुख्य वर्ग को निर्दिष्ट करके निष्पादन योग्य जार बनाने के लिए भी किया जा सकता है। मेवेन-असेंबली और मेवेन-जार का उपयोग करने की कोशिश करने के बाद, मैंने पाया कि यह प्लगइन मेरी आवश्यकताओं के अनुरूप सबसे उपयुक्त है।

मैंने यह प्लगइन विशेष रूप से उपयोगी पाया क्योंकि यह उन्हें ओवरराइट करने की बजाय विशिष्ट फ़ाइलों की सामग्री विलीन करता है। यह आवश्यक है जब संसाधन फाइलें हों जिनके पास जार में एक ही नाम है और प्लगइन सभी संसाधन फ़ाइलों को पैकेज करने का प्रयास करता है

नीचे उदाहरण देखें

      <plugins>
    <!-- This plugin provides the capability to package the artifact in an uber-jar, including its dependencies and to shade - i.e. rename - the packages of some of the dependencies. -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <version>1.4</version>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>shade</goal>
                    </goals>
                    <configuration>
                        <artifactSet>
                        <!-- signed jars-->
                            <excludes>
                                <exclude>bouncycastle:bcprov-jdk15</exclude>
                            </excludes>
                        </artifactSet>

                         <transformers>
                            <transformer
                                implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                <!-- Main class -->
                                <mainClass>com.main.MyMainClass</mainClass>
                            </transformer>
                            <!-- Use resource transformers to prevent file overwrites -->
                            <transformer 
                                 implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
                                <resource>properties.properties</resource>
                            </transformer>
                            <transformer
                                implementation="org.apache.maven.plugins.shade.resource.XmlAppendingTransformer">
                                <resource>applicationContext.xml</resource>
                            </transformer>
                            <transformer
                                implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
                                <resource>META-INF/cxf/cxf.extension</resource>
                            </transformer>
                            <transformer
                                implementation="org.apache.maven.plugins.shade.resource.XmlAppendingTransformer">
                                <resource>META-INF/cxf/bus-extensions.xml</resource>
                            </transformer>
                     </transformers>
                    </configuration>
                </execution>
            </executions>
        </plugin>

    </plugins>

91
2018-03-13 20:55



तो bcprov-jdk15.jar रनटाइम पर क्लासपाथ पर कैसे मिलता है, यह देखते हुए कि इसे छायांकन प्रक्रिया से बाहर रखा गया है? - Andrew Swan
यह सीएक्सएफ-आरटी-डब्ल्यूएस-सुरक्षा द्वारा खींचा जा रहा था जो मेरी निर्भरताओं का हिस्सा है - Vijay Katam
पहले इस प्लगइन के बारे में कभी नहीं सुना, लेकिन यह जार के अंदर spring.handlers के साथ मेरी समस्या हल हो गई। धन्यवाद! - Alexandre L Telles
जिन लोगों को सुरक्षा अपवाद मिला, उन्होंने डीएसए को मैनिफेस्ट से बाहर कर दिया। चेक maven.apache.org/plugins/maven-shade-plugin/examples/... - ruhsuzbaykus
+1 मैंने मिनीजर का उपयोग किया है: अतीत में ueberjar, लेकिन minijar प्लगइन अब बहिष्कृत है और छाया द्वारा प्रतिस्थापित किया गया है - rds


लंबे समय तक इस्तेमाल किया मेवेन असेंबली प्लगइन, लेकिन मुझे समस्या का हल नहीं मिला "already added, skipping"। अब, मैं एक और प्लगइन का उपयोग कर रहा हूँ - onejar-Maven-प्लगइन। नीचे उदाहरण (mvn package जार का निर्माण):

<plugin>
    <groupId>org.dstovall</groupId>
    <artifactId>onejar-maven-plugin</artifactId>
    <version>1.3.0</version>
    <executions>
        <execution>
            <configuration>
                <mainClass>com.company.MainClass</mainClass>
            </configuration>
            <goals>
                <goal>one-jar</goal>
            </goals>
        </execution>
    </executions>
</plugin>

आपको उस प्लगइन के लिए भंडार जोड़ने की आवश्यकता है:

<pluginRepositories>
    <pluginRepository>
        <id>onejar-maven-plugin.googlecode.com</id>
        <url>http://onejar-maven-plugin.googlecode.com/svn/mavenrepo</url>
    </pluginRepository>
</pluginRepositories>

15
2017-10-13 12:16



आउटपुट में अतिरिक्त संदेशों से छुटकारा पाने के लिए कैसे? - Alexandr


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

<build>
    <plugins>
        <plugin>
            <artifactId>maven-jar-plugin</artifactId>
            <configuration>
                <archive>
                    <manifest>
                        <mainClass>fully.qualified.MainClass</mainClass>
                    </manifest>
                </archive>
            </configuration>
        </plugin>
        <plugin>
            <artifactId>maven-dependency-plugin</artifactId>
            <executions>
                <execution>
                    <id>unpack-dependencies</id>
                    <phase>package</phase>
                    <goals>
                        <goal>unpack-dependencies</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
    <resources>
        <resource>
            <directory>${basedir}/target/dependency</directory>
        </resource>
    </resources>
</build>

14
2018-03-11 15:12





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

वनजर प्लगइन एक और विकल्प है। यह उपर्युक्त मरम्मत कार्यों को एक ही चरण में करता है।


13
2017-08-13 18:23





आप निम्नलिखित में जोड़ सकते हैं pom.xml:

<build>
<defaultGoal>install</defaultGoal>
<plugins>
  <plugin>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>2.3.2</version>
    <configuration>
      <source>1.6</source>
      <target>1.6</target>
    </configuration>
  </plugin>
  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <version>2.3.1</version>
    <configuration>
      <archive>
        <manifest>
          <addClasspath>true</addClasspath>
          <mainClass>com.mycompany.package.MainClass</mainClass>
        </manifest>
      </archive>
    </configuration>
  </plugin>
  <plugin>
    <artifactId>maven-assembly-plugin</artifactId>
    <configuration>
      <descriptorRefs>
        <descriptorRef>jar-with-dependencies</descriptorRef>
      </descriptorRefs>
      <archive>
        <manifest>
          <mainClass>com.mycompany.package.MainClass</mainClass>
        </manifest>
      </archive>
    </configuration>
    <executions>
      <execution>
        <id>make-my-jar-with-dependencies</id>
        <phase>package</phase>
        <goals>
          <goal>single</goal>
        </goals>
      </execution>
    </executions>
  </plugin>
</plugins>
</build>

बाद में आपको कंसोल के माध्यम से निर्देशिका में स्विच करना होगा, जहां pom.xml स्थित है। फिर आपको निष्पादित करना होगा एमवीएन असेंबली: सिंगल और फिर निर्भरता के साथ आपकी निष्पादन योग्य जेएआर फ़ाइल उम्मीदपूर्वक निर्माण की जाएगी। आउटपुट (लक्ष्य) निर्देशिका में स्विच करते समय आप इसे देख सकते हैं सीडी / लक्ष्य और अपने जार को एक कमांड के साथ शुरू करना जावा-jar mavenproject1-1.0-SNAPSHOT-jar-with-dependencies.jar

मैंने इसका परीक्षण किया अपाचे मेवेन 3.0.3


11
2017-11-26 14:17





आप गठबंधन कर सकते हैं maven-shade-plugin तथा maven-jar-plugin

  • maven-shade-plugin एक ही जार फ़ाइल में अपनी कक्षाओं और सभी निर्भरताओं को पैक करता है।
  • कॉन्फ़िगर करें maven-jar-plugin अपने निष्पादन योग्य जार की मुख्य कक्षा निर्दिष्ट करने के लिए (देखें कक्षापथ स्थापित करें, अध्याय "जार निष्पादन योग्य बनाओ")।

उदाहरण के लिए पीओएम विन्यास maven-jar-plugin:

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <version>2.3.2</version>
            <configuration>
                <archive>
                    <manifest>
                        <addClasspath>true</addClasspath>
                        <mainClass>com.example.MyMainClass</mainClass>
                    </manifest>
                </archive>
            </configuration>
        </plugin>

अंत में invoking द्वारा निष्पादन योग्य जार बनाएँ:

mvn clean package shade:shade

8
2017-11-23 20:28



शेड प्लगइन में अब मैनिफेस्ट में मुख्य श्रेणी प्रविष्टि निर्दिष्ट करने का माध्यम है: maven.apache.org/plugins/maven-shade-plugin/examples/... - Chadwick


मैं इन प्रतिक्रियाओं में से प्रत्येक के माध्यम से एक वसा निष्पादन योग्य जार बनाने के लिए देख रहा था जिसमें सभी निर्भरताएं थीं और उनमें से कोई भी सही काम नहीं करता था। जवाब छाया प्लगइन है, यह बहुत आसान और सीधा है।

    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-shade-plugin</artifactId>
      <version>2.3</version>
      <executions>
         <!-- Run shade goal on package phase -->
        <execution>
        <phase>package</phase>
        <goals>
            <goal>shade</goal>
        </goals>
        <configuration>
          <transformers>
             <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                <mainClass>path.to.MainClass</mainClass>
             </transformer>
          </transformers>
        </configuration>
          </execution>
      </executions>
    </plugin>

ध्यान रखें कि इसके लिए निर्भरताओं को ठीक से काम करने के लिए संकलन या रनटाइम का दायरा होना चाहिए।

यह उदाहरण mkyong.com से आया था


8
2017-09-09 13:37



जैसा कि मैंने इसे ठीक किया है, क्या आप अपनी समीक्षा अपडेट करना चाहते हैं। पोस्टिंग से पहले मैंने आपके विचारों को ध्यान में नहीं लिया था और आपकी टिप्पणी देखने पर तुरंत ठीक किया था - dsutherland
plugin तत्व अंदर चला जाता है pom.xml के अंतर्गत build/plugins। - isapir