মাভেন ব্যবহার করে নির্ভরতার সাথে আমি কীভাবে এক্সিকিউটেবল জেআর তৈরি করতে পারি?


2396

আমি আমার প্রকল্পটি বিতরণের জন্য একক এক্সিকিউটেবল জেআর-তে প্যাকেজ করতে চাই।

আমি কীভাবে কোনও আউটপুট জেআর-তে সমস্ত নির্ভরতা জেআরগুলিকে কোনও মাভেন প্রকল্প প্যাকেজ তৈরি করতে পারি?


14
আপনি যে নির্ভরশীলতা প্লাগইনটির উল্লেখ করছেন তা দয়া করে ব্যাখ্যা করুন। আমি এমন কোনও লক্ষ্য সম্পর্কে জানি না যা মূল প্রশ্নটি অনুরোধ করে: যা হয় সমস্ত নির্ভরতা এ) পুনরায় প্রচারের মাধ্যমে লেখকদের জারের ভিতরে রাখুন, বা খ) একটি এক্সিকিউটেবল জার তৈরি করুন যা অন্যদেরকে ম্যানিফয়েস্ট.এমএফের একটি শ্রেণিকথের মধ্যে রাখে
ম্যাথিউ ম্যাককুলাফ

2
আপনি এই দরকারী যুক্তিযুক্ত
ড্যান


উত্তর:


2358
<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>

22
ধন্যবাদ @ আইএডাপ্টার। মনে রাখবেন আপনার হাতের আগে সর্বদা একটি সংকলন করা উচিত কারণ এটি জেআর-তে "টার্গেট / ক্লাস" এ যা কিছু থাকবে কেবল তা স্থাপন করবে। এটি নিশ্চিত করবে যে আপনি যে উত্স কোডটিতে সম্প্রতি করেছেন সেগুলি জেআর অন্তর্ভুক্ত করে। সুতরাং, আপনার মতো কিছু করা উচিত : mvn clean compile assembly:single.
মাইকেল

10
ফেজ বাইন্ডিং অন্তর্ভুক্ত করার জন্য আমি প্রশ্নটি সম্পাদনা করেছি। আমি অবহেলিত সমাবেশের লক্ষ্যটি সরিয়েছি, কারণ এটি সম্পর্কে কারও জানা দরকার নেই।
ডানকান জোন্স

2
আমি দেখতে পাচ্ছি যে এটি উবার জারে জারগুলি যুক্ত করে না, পরিবর্তে এটি কেবল সমস্ত বর্গ ফাইলগুলিকে জারে যুক্ত করে।
পিচব্ল্যাক 408

170
টিপ: আপনার কাছে উপাদান যোগ করতে পারেন <appendAssemblyId>false</appendAssemblyId>মধ্যে configurationনামে বিরক্তিকর "-jar-সঙ্গে-নির্ভরতা" প্রত্যয় এড়াতে
maxivis

6
ভুলে যাও compileএবং আপনি ভ্রষ্ট।

349

আপনি প্যাকেজ পর্বের আগে পৃথক ডিরেক্টরিতে সমস্ত নির্ভরতা উত্পন্ন করতে নির্ভরতা-প্লাগইন ব্যবহার করতে পারেন এবং তারপরে ম্যানিফেস্টের শ্রেণিপথটিতে অন্তর্ভুক্ত করুন:

<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সমস্ত জার-ফাইলগুলিকে মূল জারে সংহত করার জন্য আউটপুট ডিরেক্টরি হিসাবে ব্যবহার করুন তবে তারপরে আপনাকে জারগুলি লোড করার জন্য কাস্টম শ্রেণিবদ্ধকরণ কোড যুক্ত করতে হবে।


3
+1 দুর্দান্ত। মেভেন-এসেম্বলি-প্লাগইনের পরিবর্তে আমি মাভেন-নির্ভরতা-প্লাগইনটির সাথে যাচ্ছি কারণ হ'ল আমি বিল্টনম্বার-মাভেন-প্লাগইনও ব্যবহার করছি এবং এইভাবে আমি প্রতিটি জারের ম্যানিফেস্টে স্বতন্ত্রভাবে সংস্করণ নম্বরটি সঞ্চয় করতে পারি।
পাপাফ্রেড

17
আমি আপনার সমাধান পছন্দ। আমি অভ্যন্তরে সমস্ত নির্ভরতা সহ একটি প্রধান .জার ${project.build.directory}/classes/libহিসাবে ব্যবহার করি outputDirectoryতবে - এই জারগুলি লোড করার জন্য কীভাবে কাস্টম শ্রেণিবদ্ধকরণ কোড যুক্ত করব? আমি কাজ সম্পাদন করতে হবে: java -jar main-jar-with-deps.jar। এটা কি সম্ভব ?
মারিওশ

3
@ আন্দ্রে অ্যারোনসেন, আমি জারটির অভ্যন্তরে কোনও লিবিয়ার ফোল্ডারে নির্ভরতা যুক্ত করতে এই সমাধানটি ব্যবহার করেছি, তবে আমি সর্বদা ক্লাসে ব্যতিক্রম পাই না, আপনি কীভাবে এটি ঠিক করতে পারেন দয়া করে পরামর্শ দিতে পারেন।
মাহমুদ সালেহ

11
+1 আপনাকে !! ম্যাভেন অ্যাসেমব্লিং প্লাগইন দেখে মনে হচ্ছে 'জার-নির্ভর-নির্ভরতা' সত্যিই ভাল কাজ করে না। আমি উত্পন্ন জারে মেটা-আইএনএফ / বসন্ত.স্কেমাসের কিছু এন্ট্রি অনুপস্থিত ছিল। তাই আমি নির্ভরতার সাথে জারটিকে স্ক্র্যাপ করে ফেলেছি এবং উপরে আপনার সমাধানটি ব্যবহার করেছি। নিখুঁত ধন্যবাদ !!!
ডেরেক

9
অন্য যে কেউ এই সমস্যার মুখোমুখি হচ্ছে তার জন্য আপনাকে অবশ্যই নিজের জারের সাথে একই ডিরেক্টরিতে lib ফোল্ডারটি অন্তর্ভুক্ত করতে হবে যেখানে আপনি জারটি পরিবহন করেন।
স্পার্টিকেলস

224

এটি করার বিভিন্ন উপায় সম্পর্কে আমি ব্লগ করেছি।

অ্যাপাচি মাভেনের সাথে এক্সিকিউটেবল জার দেখুন (ওয়ার্ডপ্রেস) এর

বা নির্বাহযোগ্য-জার-সাথে-মাভেন-উদাহরণ (গিটহাব)

মন্তব্য

সেই আগপাছ দ্বারা উপলব্ধ করা হয় স্টিফেন


ম্যানুয়াল মোতায়েনের জন্য

  • পেশাদাররা
  • কনস
    • নির্ভরতাগুলি চূড়ান্ত জারের বাইরে।

একটি নির্দিষ্ট ডিরেক্টরিতে নির্ভরতা অনুলিপি করুন

<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

Deployable সংরক্ষণাগার তৈরি করুন

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-ম্যাভেন-প্লাগইন

  • পেশাদাররা
  • কনস
    • 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


2
@caiohamamura আপনি ক্লোন করতে পারেন GitHub সংগ্রহস্থলের প্রয়োগ এবং কিভাবে সব প্রোফাইলের কাজ দেখুন।
জিন কওন

: সমস্যা প্যাকেজ আমি ব্যবহার করছিলেন সঙ্গে ছিল stackoverflow.com/a/12622037/2548351
caiohamamura

1
আমি মনে করি এটি সম্ভবত এই বিষয়ের সবচেয়ে সম্পূর্ণ উত্তর।
পেটর বোদনার

139

উত্তরহীনদের উত্তর নেওয়া এবং এটি পুনরায় ফর্ম্যাট করা, আমাদের কাছে রয়েছে:

<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গ্যাচা হ'ল কমান্ড লাইন থেকে ম্যানুয়ালি সম্পাদন করা হলে আপনি 'এসেম্বলি: এসেম্বলি' নামক কলটি যখন আপনার পম.এক্সএমএল এ রেখেছেন তবে আপনাকে লক্ষ্যটি কল করতে হবে।

<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>

10
এই জবাবটিতে পদ্ধতির ব্যবহারের ফলে নিম্নলিখিত ত্রুটি বার্তায় ফলাফল পাওয়া যায়: 'জাভা-জার <জার ফাইল>'
এলমো

3
মেভেন-জার-প্লাগইনটির সংরক্ষণাগার অংশটি প্রয়োজন <অর্ভাইভ> <ম্যানিফেস্ট> <addClasspath> সত্য </addClasspath> <mainClass> সম্পূর্ণরূপে যোগ্যতা.মেনক্লাস </mainClass> </manLive> <
संग्रह

4
দুঃখিত, এই উত্তরটি সরল ভুল, মূল ক্লাস ট্যাগটি মভেন-অ্যাসেমব্লিং-প্লাগইন এন্ট্রিতে থাকতে হবে যেহেতু আপনি প্যাকেজ গোলের সময় কল করছেন
অ্যালেক্স লেহম্যান

আমি অবাক, পিএমএসএমএল এমভিএন আরকিটাইপের পরে ইতিমধ্যে এটি অন্তর্ভুক্ত করতে পারে না: কমান্ড জেনারেট করে? আমি যখন কোনও নতুন
মাভেন

আমার ধরণের কোনও প্রধান পদ্ধতি বা ক্লাস নেই, আমার কেবল ফাংশন সহ ক্লাস রয়েছে। আমি কীভাবে বয়াম তৈরি করতে এবং এটি ব্যবহার করতে পারি
পার্লাদ

97

সমস্ত নির্ভরতাগুলিকে একটি উবার-জারে প্যাকেজ করতে মাভেন-শেড-প্লাগইন ব্যবহার করুন। এটি প্রধান বর্গ নির্দিষ্ট করে একটি নির্বাহযোগ্য জার তৈরিতেও ব্যবহার করা যেতে পারে। মাভেন-এসেম্বলি এবং মাভেন-জারটি ব্যবহার করার চেষ্টা করার পরে, আমি দেখতে পেলাম যে এই প্লাগইনটি আমার প্রয়োজনগুলির জন্য সবচেয়ে উপযুক্ত।

আমি এই প্লাগইনটি বিশেষভাবে দরকারী হিসাবে এটি নির্দিষ্ট ফাইলগুলির ওভাররাইটের পরিবর্তে সামগ্রীগুলির মার্জ করে। জার জুড়ে একই নামে থাকা রিসোর্স ফাইল থাকা অবস্থায় এটি প্রয়োজন হয় এবং প্লাগইন সমস্ত রিসোর্স ফাইল প্যাকেজ করার চেষ্টা করে

নীচে উদাহরণ দেখুন

      <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>

তাহলে কীভাবে বিসিপ্রোভ-জেডকি 15.জারটি শেড প্রক্রিয়াটি বাদ দিয়ে দেওয়া হয়েছে, রানটাইমের সময় ক্লাসপথে উঠবে?
অ্যান্ড্রু সোয়ান

এটি সিএক্সএফ-আরটি-ডাব্লু-সুরক্ষা দ্বারা টানছে যা আমার নির্ভরতার অংশ
বিজয় কাটম

এই প্লাগইন সম্পর্কে আগে কখনও শুনিনি, তবে এটি আমার সমস্যার সমাধান করে ঝর্ণার ভিতরে বসন্তের hand ধন্যবাদ!
আলেকজান্দ্রি এল টেলিজ

11
যারা সুরক্ষা ব্যতিক্রম পেয়েছেন, ডিএসএ'র ম্যানিফেস্ট থেকে বাদ দিন। পরীক্ষা করে দেখুন maven.apache.org/plugins/maven-shade-plugin/examples/...
ruhsuzbaykus

+1 আমি আগে মিনিজার: উবারজার ব্যবহার করেছি, তবে মিনিজার প্লাগইনটি এখন ছায়া দ্বারা
হ্রাস করা

19

দীর্ঘকাল ধরে মভেন অ্যাসেমব্লিং প্লাগইন ব্যবহৃত হয়েছে , তবে আমি সমস্যার কোনও সমাধান খুঁজে পাইনি "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>

কিভাবে আউটপুট অতিরিক্ত বার্তা পরিত্রাণ পেতে?
আলেকজান্দ্র

17

আপনি মাভেন-নির্ভরতা-প্লাগইন ব্যবহার করতে পারেন, তবে কীভাবে কার্যনির্বাহী জেআর তৈরি করবেন তা প্রশ্ন ছিল। এটি করার জন্য ম্যাথু ফ্রাংলিনের প্রতিক্রিয়ার নিম্নলিখিত পরিবর্তনের প্রয়োজন (বিটিডব্লিউ, নির্ভরতা প্লাগইন ব্যবহার করে পরিষ্কার লক্ষ্য থেকে শুরু করার সময় তৈরি করতে আরও বেশি সময় লাগে):

<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>

16

আপনি নীচের মত একটি উবার জার তৈরি করতে মাভেন-শেড প্লাগইন ব্যবহার করতে পারেন

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-shade-plugin</artifactId>
    <executions>
        <execution>
            <phase>package</phase>
            <goals>
                <goal>shade</goal>
            </goals>
        </execution>
    </executions>
</plugin>

তবে কীভাবে এটি রেপোতে মোতায়েন হতে চলেছে?
ফ্রান্সেস্কো গুয়ালাজি

15

আপনি যদি সত্যিই আপনার একক ফলাফল জেআর-এর ভিতরে থাকা অন্যান্য জেআর বিষয়বস্তুগুলি পুনরায় প্যাকেজ করতে চান তবে অন্য একটি বিকল্প হ'ল মাভেন অ্যাসেমব্লিং প্লাগইন । এটি আনপ্যাক করে এবং তারপরে সমস্ত ডিরেক্টরিটিকে ডিরেক্টরিতে পুনরায় পোস্ট করে <unpack>true</unpack>। তারপরে আপনার কাছে দ্বিতীয় পাস রয়েছে যা এটিকে একটি বিশাল জেআর হিসাবে তৈরি করেছে।

আর একটি বিকল্প ওয়ানজার প্লাগইন । এটি এক ধাপে সমস্ত উপরের পুনঃস্থাপনের ক্রিয়া সম্পাদন করে।


14

আপনি আপনার 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 অবস্থিত। তারপরে আপনাকে এমভিএন সমাবেশ কার্যকর করতে হবে : একক এবং তারপরে নির্ভরতার সাথে আপনার এক্সিকিউটেবল জেআর ফাইলটি আশাবাদী নির্মিত হবে fully সিডি। / ডেটের সাথে আউটপুট (টার্গেট) ডিরেক্টরিতে স্যুইচ করার সময় এবং জাভা-জার-মাভেনপ্রজেক্ট 1-1.0-এসএনএপিএসশট-জার-নির্ভরশীলতা.জারের সাথে সমান কমান্ডের সাহায্যে আপনার জার শুরু করার সময় আপনি এটি পরীক্ষা করতে পারেন can

আমি এটি অ্যাপাচি মাভেন 3.0.3 দিয়ে পরীক্ষা করেছি ।


13

আমি সমস্ত প্রতিক্রিয়াযুক্ত একটি চর্বি নির্বাহযোগ্য জার তৈরি করার জন্য এই প্রতিক্রিয়াগুলির প্রত্যেকটির মধ্য দিয়ে গিয়েছিলাম এবং তাদের কোনওটিই সঠিকভাবে কাজ করেনি। উত্তরটি শেড প্লাগইন, এটি খুব সহজ এবং সোজা।

    <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 থেকে


আমি যেমন এটি স্থির করেছি, আপনি কি আপনার পর্যালোচনাটি আপডেট করার বিষয়ে আপত্তি করবেন। পোস্ট করার আগে আমি আপনার চিন্তা বিবেচনায়
নিইনি এবং

2
pluginউপাদান যায় pom.xmlঅধীনে build/plugins
ইস্পির

12

আপনি 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>

অবশেষে অনুরোধ করে সম্পাদনযোগ্য জার তৈরি করুন:

mvn clean package shade:shade

3
শেড প্লাগইনটির এখন ম্যানিফেস্টে মূল-শ্রেণীর প্রবেশ নির্দিষ্টকরণের মাধ্যম রয়েছে: maven.apache.org/plugins/maven-shade-plugin/example/…
চাদউইক

9

কেন লিউ আমার মতামত ঠিক আছে। মাভেন নির্ভরতা প্লাগইন আপনাকে সমস্ত নির্ভরতা প্রসারিত করতে দেয় যা আপনি এরপরে সংস্থান হিসাবে বিবেচনা করতে পারবেন। এটি আপনাকে সেগুলিকে প্রধান নিদর্শনগুলিতে অন্তর্ভুক্ত করতে দেয় । সমাবেশ প্লাগইনের ব্যবহার একটি মাধ্যমিক শৈল্পিক তৈরি করে যা সংশোধন করা কঠিন হতে পারে - আমার ক্ষেত্রে আমি কাস্টম মেনিফেস্ট এন্ট্রি যুক্ত করতে চেয়েছিলাম। আমার পোমটি শেষ হয়েছে:

<project>
 ...
 <build>
  <plugins>
   <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <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>
    <targetPath>/</targetPath>
   </resource>
  </resources>
 </build>
 ...
</project>

1
সত্যিই সুন্দর! আনপ্যাকিংয়ের জন্য জেনারেট-রিসোর্স ফেজটি ব্যবহার করা ভাল না?
নভরোথ

9

এটি এমন হওয়া উচিত:

<plugin>
    <artifactId>maven-dependency-plugin</artifactId>
    <executions>
        <execution>
            <id>unpack-dependencies</id>
            <phase>generate-resources</phase>
            <goals>
                <goal>unpack-dependencies</goal>
            </goals>
        </execution>
    </executions>
</plugin>

আনপ্যাকিংটি জেনারেট-রিসোর্স পর্যায়ে থাকতে হবে কারণ প্যাকেজ পর্যায়ে থাকলে তা সংস্থান হিসাবে অন্তর্ভুক্ত হবে না। পরিষ্কার প্যাকেজ চেষ্টা করুন এবং আপনি দেখতে পাবেন।


7

ম্যাভেন-এসেম্বলি-প্লাগইন -২.২.১ এর সাথে ভাগ করা অ্যাসেমবিলি ফাইলটি সনাক্ত করতে সমস্যা?

বর্ণনাকারী / বর্ণনাকারী বা বর্ণনাকারী রেফ / বিবরণকারী রেফ পরামিতিগুলির পরিবর্তে বর্ণনাকারী আইডি কনফিগারেশন প্যারামিটার ব্যবহার করার চেষ্টা করুন।

তাদের কেউই আপনার যা প্রয়োজন তা করেন না: ক্লাসপাথের ফাইলটি সন্ধান করুন। অবশ্যই আপনাকে প্যাকেজ যুক্ত করতে হবে যেখানে ভাগ করা সমাবেশ মেমেন-এসেম্বলি-প্লাগইন এর ক্লাসপাথে থাকে (নীচে দেখুন)। আপনি যদি ম্যাভেন ২.x (ম্যাভেন ৩.x না) ব্যবহার করছেন তবে আপনার প্লাগইনম্যানেজমেন্ট বিভাগে শীর্ষস্থানীয় প্যারেন্ট pom.xML এ এই নির্ভরতা যুক্ত করার প্রয়োজন হতে পারে।

দেখুন এই আরো বিস্তারিত জানার জন্য।

শ্রেণি: org.apache.maven.plugin.asorses.io.DefaultAs असقাইজ রিডার

উদাহরণ:

        <!-- Use the assembly plugin to create a zip file of all our dependencies. -->
        <plugin>
            <artifactId>maven-assembly-plugin</artifactId>
            <version>2.2.1</version>
            <executions>
                <execution>
                    <id>make-assembly</id>
                    <phase>package</phase>
                    <goals>
                        <goal>single</goal>
                    </goals>
                    <configuration>
                        <descriptorId>assembly-zip-for-wid</descriptorId>
                    </configuration>
                </execution>
            </executions>
            <dependencies>
                <dependency>
                    <groupId>cz.ness.ct.ip.assemblies</groupId>
                    <artifactId>TEST_SharedAssemblyDescriptor</artifactId>
                    <version>1.0.0-SNAPSHOT</version>
                </dependency>
            </dependencies>
        </plugin>

7

এই সমস্যাটি সমাধান করার জন্য আমরা মাভেন অ্যাসেম্বলি প্লাগইন ব্যবহার করব যা এর নির্ভরতা জেআআআর একসাথে একক এক্সিকিউটেবল জেআর ফাইল হিসাবে জেআর তৈরি করবে। আপনার পম.এমএমএল ফাইলটিতে প্লাগইন কনফিগারেশনটি কেবল নীচে যুক্ত করুন।

<build>
   <pluginManagement>
      <plugins>
         <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-assembly-plugin</artifactId>
            <configuration>
               <archive>
                  <manifest>
                     <addClasspath>true</addClasspath>
                     <mainClass>com.your.package.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>
   </pluginManagement>
</build>

এটি করার পরে এই কমান্ডটি mvn ক্লিন কম্পাইল অ্যাসেম্বলি: একক দিয়ে MAVEN টুলটি চালাতে ভুলবেন না

http://jkoder.com/maven-creating-a-jar-together-with-its-dependency-jars-into-a-single-executable-jar-file/


5

অন্যরা ইতিমধ্যে এর আগে যেমনটি করে ফেলেছে আমি সরাসরি প্রশ্নের উত্তর দেব না, তবে আমি সত্যিই ভাবছি যে প্রকল্পের জারে নিজেই সমস্ত নির্ভরতা এম্বেড করা ভাল ধারণা কিনা।

আমি পয়েন্টটি দেখছি (স্থাপনা / ব্যবহারের সহজতা) তবে এটি আপনার পোজেক্টের ব্যবহারের ক্ষেত্রে নির্ভর করে (এবং বিকল্প থাকতে পারে (নীচে দেখুন))।

আপনি যদি এটি পুরোপুরি এককভাবে ব্যবহার করেন তবে কেন করবেন না।

তবে আপনি যদি অন্য প্রকল্পে আপনার প্রকল্পটি ব্যবহার করেন (যেমন একটি ওয়েবঅ্যাপে, বা এমন ফোল্ডারে যেখানে অন্যান্য জারগুলি বসে থাকে), আপনার ক্লাসপথে জার সদৃশ থাকতে পারে (ফোল্ডারে থাকা একটি, জারের মধ্যে একটি)। হয়তো বিডের চুক্তি না হলেও আমি সাধারণত এটি এড়াতে পারি।

একটি ভাল বিকল্প:

  • আপনার অ্যাপ্লিকেশনটিকে .zip / .war হিসাবে স্থাপন করুন: সংরক্ষণাগারে আপনার প্রকল্পের জার এবং সমস্ত নির্ভরশীল জারগুলি রয়েছে;
  • আপনার প্রকল্পের একক এন্ট্রি পয়েন্ট পেতে একটি গতিশীল ক্লাসলোডার প্রক্রিয়া (স্প্রিং দেখুন বা আপনি সহজেই এটি নিজে করতে পারেন) ব্যবহার করুন (একক শ্রেণি শুরু করার জন্য - অন্য উত্তরে ম্যানিফেস্ট মেকানিজম দেখুন), এতে যুক্ত হবে (গতিশীল) অন্যান্য ক্লাসপাথ অন্যান্য প্রয়োজনীয় জার।

এটির মতো, শেষ পর্যন্ত কেবল একটি ম্যানিফেস্ট এবং একটি "বিশেষ গতিশীল ক্লাসলোডার মেইন" দিয়ে আপনি আপনার প্রকল্পটি এর সাথে শুরু করতে পারেন:

java -jar ProjectMainJar.jar com.stackoverflow.projectName.MainDynamicClassLoaderClass

1
কীভাবে প্রজেক্টের জার এবং সমস্ত নির্ভরশীল জারগুলি সংরক্ষণাগারটিতে রাখা যায়?

4

কমান্ড লাইন থেকে নিজে একটি এক্সিকিউটেবল জেআর তৈরি করতে কেবল প্রকল্পের পথ থেকে নীচের কমান্ডটি চালান:

mvn assembly:assembly

3
আমার মনে হয় pom.xmlঅন্যথায় আপনি যে জিনিসটি পাবেন তাতে আপনার এখনও কিছু স্টাফ করা দরকার Error reading assemblies: No assembly descriptors found.। আমার ক্ষেত্রে যা হয় তা-ই হয়।
শ্রীধর সারনোবাত

3

এটি আমি খুঁজে পেয়েছি সেরা উপায়:

  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <version>2.4</version>
    <configuration>
      <archive>
        <manifest>
        <addClasspath>true</addClasspath>
        <mainClass>com.myDomain.etc.MainClassName</mainClass>
        <classpathPrefix>dependency-jars/</classpathPrefix>
        </manifest>
      </archive>
    </configuration>
  </plugin>
  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-dependency-plugin</artifactId>
    <version>2.5.1</version>
    <executions>
      <execution>
        <id>copy-dependencies</id>
        <phase>package</phase>
        <goals>
            <goal>copy-dependencies</goal>
        </goals>
        <configuration>
            <outputDirectory>
               ${project.build.directory}/dependency-jars/
            </outputDirectory>
        </configuration>
      </execution>
    </executions>
  </plugin>

এই কনফিগারেশন সহ, সমস্ত নির্ভরতা মধ্যে অবস্থিত হবে /dependency-jars। আমার অ্যাপ্লিকেশনটির কোনও Mainশ্রেণি নেই, কেবল প্রসঙ্গ প্রবন্ধ রয়েছে, তবে আমার নির্ভরতার মধ্যে একটিতে Mainক্লাস ( com.myDomain.etc.MainClassName) রয়েছে যা জেএমএক্স সার্ভার শুরু করে এবং একটি startবা একটি stopপ্যারামিটার গ্রহণ করে । সুতরাং এটির সাহায্যে আমি আমার অ্যাপ্লিকেশনটি এভাবে শুরু করতে সক্ষম হয়েছি:

java -jar ./lib/TestApp-1.0-SNAPSHOT.jar start

আমি অপেক্ষা করি এটি আপনার সকলের জন্য কার্যকর হবে।


3

আমি এই পোস্টে উল্লিখিত ট্রি প্লাগইনগুলির সাথে তুলনা করেছি। আমি 2 জার এবং সমস্ত জার সহ একটি ডিরেক্টরি তৈরি করেছি। আমি ফলাফলগুলি তুলনা করেছি এবং অবশ্যই মভেন শেড-প্লাগইন সেরা the আমার চ্যালেঞ্জটি ছিল যে আমার কাছে একাধিক বসন্ত সংস্থান আছে যা মার্জ করার দরকার ছিল, পাশাপাশি জ্যাক্স-আরএস এবং জেডিবিসি পরিষেবাগুলি। তারা সবাই শেভ প্লাগইন দ্বারা ম্যাভেন-অ্যাসেমব্লিং-প্লাগইনের সাথে তুলনায় সঠিকভাবে মার্জ করা হয়েছিল। কোন ক্ষেত্রে বসন্তটি ব্যর্থ হবে যদি না আপনি এগুলিকে আপনার নিজের রিসোর্স ফোল্ডারে অনুলিপি করেন এবং একবারে ম্যানুয়ালি মার্জ করে। উভয় প্লাগইন সঠিক নির্ভরতা ট্রি আউটপুট। আমার কাছে পরীক্ষা, সরবরাহ, সংকলন ইত্যাদি পরীক্ষার মতো একাধিক স্কোপ ছিল এবং সরবরাহিত উভয় প্লাগইন এড়িয়ে যায়। তারা উভয়ই একই ম্যানিফেস্ট উত্পাদন করেছিল তবে আমি তাদের ট্রান্সফর্মার ব্যবহার করে শেড প্লাগইন সহ লাইসেন্স একীভূত করতে সক্ষম হয়েছি। অবশ্যই আপনি ডন 'মভেন-নির্ভরতা-প্লাগইন সহ জারগুলি উত্তোলন করা হয়নি বলে এই সমস্যাগুলি রয়েছে। তবে অন্যদের মতো ঠিক মতো কাজ করার জন্য আপনাকে একটি অতিরিক্ত ফাইল (গুলি) বহন করতে হবে। এখানে pom.xML এর একটি স্নিপ দেওয়া আছে

            <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>
                        <includeScope>compile</includeScope>
                        <excludeTransitive>true</excludeTransitive>
                        <overWriteReleases>false</overWriteReleases>
                        <overWriteSnapshots>false</overWriteSnapshots>
                        <overWriteIfNewer>true</overWriteIfNewer>
                    </configuration>
                </execution>
            </executions>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-assembly-plugin</artifactId>
            <version>2.6</version>
            <configuration>
                <archive>
                    <manifest>
                        <addClasspath>true</addClasspath>
                        <mainClass>com.rbccm.itf.cdd.poller.landingzone.LandingZonePoller</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>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <version>2.4.3</version>
            <configuration>
                <shadedArtifactAttached>false</shadedArtifactAttached>
                <keepDependenciesWithProvidedScope>false</keepDependenciesWithProvidedScope>
                <transformers>
                    <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
                        <resource>META-INF/services/javax.ws.rs.ext.Providers</resource>
                    </transformer>
                    <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
                        <resource>META-INF/spring.factories</resource>
                    </transformer>
                    <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
                        <resource>META-INF/spring.handlers</resource>
                    </transformer>
                    <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
                        <resource>META-INF/spring.schemas</resource>
                    </transformer>
                    <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
                        <resource>META-INF/spring.tooling</resource>
                    </transformer>
                    <transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/>
                    <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"/>
                    <transformer implementation="org.apache.maven.plugins.shade.resource.ApacheLicenseResourceTransformer">
                    </transformer>
                </transformers>
            </configuration>
            <executions>
                <execution>
                    <goals>
                        <goal>shade</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>

2

আমার পক্ষে কাজ করে এমন কিছু ছিল:

  <plugin>
    <artifactId>maven-dependency-plugin</artifactId>
    <executions>
      <execution>
        <id>unpack-dependencies</id>
        <phase>prepare-package</phase>
        <goals>
          <goal>unpack-dependencies</goal>
        </goals>
        <configuration>
          <outputDirectory>${project.build.directory}/classes</outputDirectory>
        </configuration>
      </execution>

    </executions>
  </plugin>


  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <executions>
      <execution>
        <id>unpack-dependencies</id>
        <phase>package</phase>
      </execution>
    </executions>
    <configuration>
      <archive>
        <manifest>
          <addClasspath>true</addClasspath>
          <classpathPrefix>lib/</classpathPrefix>
          <mainClass>SimpleKeyLogger</mainClass>
        </manifest>
      </archive>
    </configuration>
  </plugin>

আমার অসাধারণ কেস ছিল কারণ আমার নির্ভরতা সিস্টেম এক:

<dependency>
  ..
  <scope>system</scope>
  <systemPath>${project.basedir}/lib/myjar.jar</systemPath>
</dependency>

আমি @ ব্যবহারকারী 189057 দ্বারা প্রদত্ত কোডটি পরিবর্তনের মাধ্যমে পরিবর্তন করেছি: 1) "প্রস্তুত-প্যাকেজ" পর্যায়ে ম্যাভেন-নির্ভরতা-প্লাগইন সম্পাদন করা হয় 2) আমি সরাসরি "টার্গেট / ক্লাস" এ প্যাকবিহীন সংঘর্ষ বের করছি


2

আমি এখানে সর্বাধিক ভোট দেওয়া উত্তর চেষ্টা করেছি, এবং জার চালাতে সক্ষম হয়েছি। তবে প্রোগ্রামটি সঠিকভাবে চলেনি। কারণটা কী ছিল জানি না। আমি যখন থেকে চালানোর চেষ্টা করিEclipse অন্যরকম ফলাফল পাই তবে কমান্ড-লাইন থেকে জার চালানোর সময় আমি একটি আলাদা ফলাফল পাই (এটি একটি প্রোগ্রাম-নির্দিষ্ট রানটাইম ত্রুটির সাথে ক্র্যাশ হয়)।

ওপি হিসাবে আমারও একই প্রয়োজনীয়তা ছিল যে আমার প্রকল্পের জন্য আমার অনেক বেশি (ম্যাভেন) নির্ভরতা ছিল। ভাগ্যক্রমে, আমার জন্য একমাত্র সমাধানটি কাজ করেছিল তা হ'ল ব্যবহার Eclipse। খুব সাধারণ এবং খুব সোজা। এটি ওপি-র কোনও সমাধান নয় তবে এমন একটি ব্যক্তির সমাধান যা একই রকম প্রয়োজন তবে অনেকগুলি ম্যাভেন নির্ভরতা সহ,

1) আপনার প্রকল্প ফোল্ডারে (Eclipse এ) ডান-ক্লিক করুন এবং নির্বাচন করুন Export

2) তারপরে Java-> নির্বাচন করুনRunnable Jar

3) আপনাকে জার ফাইলটির অবস্থান চয়ন করতে বলা হবে

4) অবশেষে, আপনি যে প্রধান পদ্ধতিটি চালাতে চান তা নির্বাচন করুন Package dependencies with the Jar fileএবং ক্লিক করুন এবং ক্লিক করুনFinish


2

এটি একটি বিকল্পও হতে পারে, আপনি আপনার জার ফাইলটি তৈরি করতে সক্ষম হবেন

<build>
    <plugins>
        <plugin>
            <!-- Build an executable JAR -->
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <version>2.4</version>
            <configuration>
                <archive>
                    <manifest>
                        <addClasspath>true</addClasspath>
                        <classpathPrefix>lib/</classpathPrefix>
                        <mainClass>WordListDriver</mainClass>
                    </manifest>
                </archive>
            </configuration>
        </plugin>
    </plugins>
</build>

2

উবার-জার থেকে নির্দিষ্ট নির্ভরতা বাদ দেওয়ার জন্য বিকল্পগুলির সন্ধানকারী যে কোনও ব্যক্তির জন্য, এটি এমন একটি সমাধান যা আমার পক্ষে কাজ করেছে:

<project...>
<dependencies>
        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-core_2.11</artifactId>
            <version>1.6.1</version>
            <scope>provided</scope> <=============
        </dependency>
</dependencies>
<build>
        <plugins>
            <plugin>
                <artifactId>maven-assembly-plugin</artifactId>
                <configuration>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                    <archive>
                        <manifest>
                            <mainClass>...</mainClass>
                        </manifest>
                    </archive>
                </configuration>
                <executions>
                    <execution>
                        <id>make-assembly</id>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

সুতরাং এটি এমভিএন-এসেম্বলি-প্লাগইনটির কনফিগারেশন নয় বরং নির্ভরতার সম্পত্তি।


2

ইতিমধ্যে লক্ষ লক্ষ উত্তর রয়েছে, আমি <mainClass>আপনার অ্যাপ্লিকেশনটিতে এন্ট্রিপয়েন্ট যুক্ত করার প্রয়োজন না হলে আপনার প্রয়োজন নেই এমনটি যুক্ত করতে চেয়েছিলাম। উদাহরণস্বরূপ, APIs এর অগত্যা mainপদ্ধতি থাকতে পারে না ।

maven প্লাগইন কনফিগার করুন

  <build>
    <finalName>log-enrichment</finalName>
    <plugins>
      <plugin>
        <artifactId>maven-assembly-plugin</artifactId>
        <configuration>
          <descriptorRefs>
            <descriptorRef>jar-with-dependencies</descriptorRef>
          </descriptorRefs>
        </configuration>
      </plugin>
    </plugins>
  </build>

বিল্ড

mvn clean compile assembly:single

যাচাই

ll target/
total 35100
drwxrwx--- 1 root vboxsf     4096 Sep 29 16:25 ./
drwxrwx--- 1 root vboxsf     4096 Sep 29 16:25 ../
drwxrwx--- 1 root vboxsf        0 Sep 29 16:08 archive-tmp/
drwxrwx--- 1 root vboxsf        0 Sep 29 16:25 classes/
drwxrwx--- 1 root vboxsf        0 Sep 29 16:25 generated-sources/
drwxrwx--- 1 root vboxsf        0 Sep 29 16:25 generated-test-sources/
-rwxrwx--- 1 root vboxsf 35929841 Sep 29 16:10 log-enrichment-jar-with-dependencies.jar*
drwxrwx--- 1 root vboxsf        0 Sep 29 16:08 maven-status/

2

Pom.xML এ যুক্ত করুন:

  <dependency>
            <groupId>com.jolira</groupId>
            <artifactId>onejar-maven-plugin</artifactId>
            <version>1.4.4</version>
  </dependency>

এবং

<plugin>
       <groupId>com.jolira</groupId>
       <artifactId>onejar-maven-plugin</artifactId>
       <version>1.4.4</version>
       <executions>
              <execution>
                     <goals>
                         <goal>one-jar</goal>
                     </goals>
              </execution>
       </executions>
</plugin>

এটাই. পরবর্তী এমভিএন প্যাকেজ সমস্ত নির্ভরতা জারগুলি সহ অতিরিক্তভাবে একটি ফ্যাট জার তৈরি করবে।


1

মাভেন-অ্যাসেম্বলি-প্লাগইন আমার জন্য দুর্দান্ত কাজ করেছে। আমি মাভেন-নির্ভরতা-প্লাগইন সহ ঘন্টা কাটিয়েছি এবং এটি কাজ করতে পারি না। মূল কারণটি হ'ল আমাকে কনফিগারেশন বিভাগে স্পষ্টভাবে শিল্পকর্ম আইটেমগুলি সংজ্ঞায়িত করতে হয়েছিল যা ডকুমেন্টেশনে বর্ণিত হিসাবে এটি অন্তর্ভুক্ত করা উচিত । আপনি যখন এটির মতো ব্যবহার করতে চান তখন এর উদাহরণগুলির একটি উদাহরণ রয়েছে: mvn dependency:copyযেখানে কোনও আর্টিফ্যাক্ট আইটেম অন্তর্ভুক্ত থাকে না তবে এটি কার্যকর হয় না।


1

এই ব্লগ পোস্টটি মাভেন-জার এবং মাভেন-এসেম্বলি প্লাগইনগুলির সংমিশ্রণের সাথে আরেকটি পন্থা দেখায়। ব্লগ পোস্ট থেকে অ্যাসেম্বলি কনফিগারেশন এক্সএমএল এর সাহায্যে নির্ভরতাগুলি প্রসারিত হবে বা কেবল একটি ফোল্ডারে সংগ্রহ করা হবে এবং ম্যানিফেস্টে শ্রেণিপথ এন্ট্রি দ্বারা রেফারেন্স করা হলে এটিও নিয়ন্ত্রণ করা যেতে পারে:

আদর্শ সমাধান হ'ল জারগুলি একটি লিবিব ফোল্ডারে অন্তর্ভুক্ত করা এবং প্রধান জারের ম্যানিফেস্ট.এমএফ ফাইলটি ক্লাসপথে সমস্ত জার অন্তর্ভুক্ত করে।

এবং ঠিক এখানে একটি বর্ণিত হয়েছে: https://caffebig.wordpress.com/2013/04/05/executable-jar-file-with-d dependent-jars- using-maven/


0
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-assembly-plugin</artifactId>
            <version>2.4.1</version>
            <configuration>
                <!-- get all project dependencies -->
                <descriptorRefs>
                    <descriptorRef>jar-with-dependencies</descriptorRef>
                </descriptorRefs>
            </configuration>
            <executions>
                <execution>
                    <id>make-assembly</id>
                    <!-- bind to the packaging phase -->
                    <phase>package</phase>
                    <goals>
                        <goal>single</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

1
এর আরও কিছুটা ব্যাখ্যা দরকার; এই মন্তব্যগুলি কি কেবল নথিভুক্ত, নাকি এই মন্তব্যগুলির অবস্থানগুলিতে অতিরিক্ত বিকল্পগুলি রাখা দরকার?
মার্ক স্টুয়ার্ট

-2

ঠিক আছে, তাই এটি আমার সমাধান। আমি জানি এটি pom.xML ফাইলটি ব্যবহার করছে না not তবে নেটবিনে আমার প্রোগ্রামিং সংকলন এবং চলমান সমস্যাটি আমার ছিল কিন্তু আমি জাভা-মাইজারফাইল.জার চেষ্টা করার সময় ব্যর্থ হয়েছিল। এখন, আমি মাভেনকে পুরোপুরি বুঝতে পারছি না এবং আমি মনে করি যে আমার জারের ফাইলটিকে একটি জার ফাইলে রাখার জন্য আমার জার ফাইলটি একটি লাইব্রেরিতে অন্তর্ভুক্ত করতে নেটবিন্স 8.0.2 পেতে কেন সমস্যা হচ্ছে। আমি ভাবছিলাম যে আমি কীভাবে একলাইসে কোনও ম্যাভেন না রেখে জার ফাইলগুলি ব্যবহার করব।

এটি ম্যাভেন যা সমস্ত নির্ভরশীলতা এবং প্লাগইন সংকলন করতে পারে। নেটবিন নয়। (যদি আপনি নেটবিন পেতে এবং জাভা ব্যবহার করতে সক্ষম হন তবে এটি করতে দয়া করে আমাকে বলুন (^। ^) ভি)

[সমাধান করা - লিনাক্সের জন্য] একটি টার্মিনাল খোলার মাধ্যমে।

তারপর

cd /MyRootDirectoryForMyProject

পরবর্তী

mvn org.apache.maven.plugins:maven-compiler-plugin:compile

পরবর্তী

mvn install

এটি লক্ষ্য ডিরেক্টরিতে জার ফাইল তৈরি করবে।

MyJarFile-1.0-jar-with-dependencies.jar

এখন

cd target

(আপনার চালানোর দরকার হতে পারে: chmod +x MyJarFile-1.0-jar-with-dependencies.jar :)

এবং পরিশেষে

java -jar MyJarFile-1.0-jar-with-dependencies.jar

দয়া করে দেখুন

https://cwiki.apache.org/confluence/display/MAVEN/LifecyclePhaseNotFoundException

আমি এই সমাধানটি একই ধরণের সমস্যার সাথে আরও কয়েকটি পৃষ্ঠায় পোস্ট করব। আশা করি আমি এক সপ্তাহের হতাশার হাত থেকে কাউকে বাঁচাতে পারি।


2
নেটবিন্স দিয়ে আপনি তৈরি ম্যাভেন প্রকল্পটি খোলার চেষ্টা করুন। নেটবিনের মৌলিক নিয়মটি সর্বদা একটি ম্যাভেন প্রকল্প তৈরি করে এবং কখনও 'জাভা অ্যাপ্লিকেশন' তৈরি করে না The উত্তরের মতো একটি মাভেন-শেড-প্লাগইন যুক্ত করে। একটি যাদুমন্ত্র মত কাজ করে.
rjdkolb
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.