プロジェクトを単一の実行可能 JAR にパッケージ化して配布したいと考えています。
Maven プロジェクトですべての依存関係 JAR を出力 JAR にパッケージ化するにはどうすればよいですか?
プロジェクトを単一の実行可能 JAR にパッケージ化して配布したいと考えています。
Maven プロジェクトですべての依存関係 JAR を出力 JAR にパッケージ化するにはどうすればよいですか?
<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
これにより、デプロイメント/リリースを実行または実行するときにJARが確実に構築されます。
<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>
<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>
</plugins>
</build>
依存関係プラグインを使用して、パッケージ フェーズの前に別のディレクトリにすべての依存関係を生成し、それをマニフェストのクラスパスに含めることができます。
<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>
または、OutputDirectory として使用${project.build.directory}/classes/lib
して、すべての jar ファイルをメイン jar に統合しますが、その後、jar をロードするカスタム クラスローディング コードを追加する必要があります。
executable-jar-with-maven-example (GitHub)を参照してください。
これらの長所と短所はStephanによって提供されます。
<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
ます。
<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
ます。
未回答の回答を取得して再フォーマットすると、次のようになります。
<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 に入れる場合はゴールを呼び出す必要があり、コマンド ラインから手動で実行する場合は「assembly:assembly」を呼び出す必要があります。
<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>
maven-shade-plugin を使用して、すべての依存関係を 1 つの uber-jar にパッケージ化します。また、メイン クラスを指定して、実行可能な jar を構築するために使用することもできます。maven-assembly と maven-jar を使用しようとした後、このプラグインが私のニーズに最適であることがわかりました。
このプラグインは、特定のファイルのコンテンツを上書きするのではなくマージするため、特に便利であることがわかりました。これは、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>
長い間maven アセンブリ プラグインを使用していましたが、問題の解決策が見つかりませんでした"already added, skipping"
。今、私は別のプラグインを使用しています - onejar-maven-plugin。以下の例 (mvn package
ビルド jar):
<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>
maven-dependency-pluginを使用できますが、問題は実行可能なJARを作成する方法でした。これを行うには、Matthew Franglenの応答に次の変更を加える必要があります(ところで、依存関係プラグインを使用すると、クリーンなターゲットから開始するときにビルドに時間がかかります)。
<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>
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 があるディレクトリに切り替える必要があります。次に、mvn assembly:singleを実行する必要があり、依存関係のある実行可能 JAR ファイルがビルドされることを願っています。cd ./targetで出力 (ターゲット) ディレクトリに切り替え、java -jar mavenproject1-1.0-SNAPSHOT-jar-with-dependencies.jar と同様のコマンドで jar を起動すると、確認できます。
これをApache Maven 3.0.3でテストしました。
結果として得られる単一のJAR内に他のJARコンテンツを本当に再パッケージ化する場合の別のオプションは、Mavenアセンブリプラグインです。を介してすべてを解凍し、ディレクトリに再パックします<unpack>true</unpack>
。次に、それを1つの大規模なJARに組み込んだ2番目のパスがあります。
もう1つのオプションは、OneJarプラグインです。これにより、上記の再パッケージ化アクションがすべて1つのステップで実行されます。
すべての依存関係を含むファットな実行可能 jar を作成しようとして、これらの応答のすべてを調べましたが、どれも正しく機能しませんでした。答えは、非常に簡単で簡単なシェード プラグインです。
<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>
これが正しく機能するには、依存関係にコンパイルまたはランタイムのスコープが必要であることに注意してください。
maven-shade-plugin
とを組み合わせることができmaven-jar-plugin
ます。
maven-shade-plugin
、クラスとすべての依存関係を 1 つの jar ファイルにパックします。maven-jar-plugin
実行可能 jar のメイン クラスを指定するように を構成します (クラスパスの設定 の「Jar を実行可能にする」の章を参照)。の POM 構成の例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>
最後に、以下を呼び出して実行可能な jar を作成します。
mvn clean package shade:shade
次のようになります。
<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>
パッケージ フェーズの場合、リソースとして含まれないため、アンパックは generate-resources フェーズで行う必要があります。きれいなパッケージを試してみてください。
私の意見では、Ken Liuはそれを正しく理解しています。Maven 依存関係プラグインを使用すると、すべての依存関係を展開して、リソースとして扱うことができます。これにより、それらをメインのアーティファクトに含めることができます。アセンブリ プラグインを使用すると、変更が難しい二次的なアーティファクトが作成されます。私の場合は、カスタム マニフェスト エントリを追加したかったのです。私のポンは次のようになりました:
<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>
maven-assembly-plugin-2.2.1 での共有アセンブリ ファイルの検索に問題がありますか?
descriptors/descriptor または descriptorRefs/descriptorRef パラメーターの代わりに、descriptorId 構成パラメーターを使用してみてください。
どちらも必要なことを行いません。クラスパスでファイルを探してください。もちろん、共有アセンブリが maven-assembly-plugin のクラスパスに存在するパッケージを追加する必要があります (以下を参照)。Maven 2.x (Maven 3.x ではない) を使用している場合、この依存関係を pluginManagement セクションの最上位の親 pom.xml に追加する必要がある場合があります。
詳しくはこちらをご覧ください。
クラス: org.apache.maven.plugin.assembly.io.DefaultAssemblyReader
例:
<!-- 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>
この問題を解決するには、Maven アセンブリ プラグインを使用します。このプラグインは、JAR とその依存関係 JAR を一緒に単一の実行可能 JAR ファイルに作成します。以下のプラグイン構成を pom.xml ファイルに追加するだけです。
<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 clean compile assembly:single で MAVEN ツールを実行することを忘れないでください。
他の人が以前に行ったことがあるので、私は直接質問に答えませんが、プロジェクトの jar 自体にすべての依存関係を埋め込むのが良い考えかどうか本当に疑問に思います。
ポイント(展開/使用の容易さ)はわかりますが、それはあなたのプロジェクトのユースケースに依存します(そして代替案があるかもしれません(以下を参照))。
完全にスタンドアロンで使用する場合は、そうではありません。
ただし、プロジェクトを他のコンテキスト (webapp 内、または他の jar が置かれているフォルダーにドロップするなど) で使用する場合、クラスパスに jar の重複 (フォルダー内のもの、jars 内のもの) が含まれる可能性があります。入札取引ではないかもしれませんが、私は通常これを避けます。
良い代替案:
このように、最終的にはマニフェストと「特別な動的クラスローダーのメイン」だけで、プロジェクトを次のように開始できます。
java -jar ProjectMainJar.jar com.stackoverflow.projectName.MainDynamicClassLoaderClass
コマンド ライン自体から実行可能な JAR を作成するには、プロジェクト パスから次のコマンドを実行します。
mvn assembly:assembly
これは私が見つけた最良の方法です:
<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
、コンテキスト クラスだけがありますが、依存関係の 1 つに、JMX サーバーを起動し、またはパラメーターを受け取るMain
クラス ( ) があります。これで、次のようにアプリケーションを開始できました。com.myDomain.etc.MainClassName
start
stop
java -jar ./lib/TestApp-1.0-SNAPSHOT.jar start
皆様のお役に立てば幸いです。
ここで最も投票数の多い回答を試してみたところ、jar を実行可能にすることができました。しかし、プログラムは正しく実行されませんでした。理由はわかりません。から実行しようとするとEclipse
、別の結果が得られますが、コマンドラインから jar を実行すると、別の結果が得られます (プログラム固有のランタイム エラーでクラッシュします)。
プロジェクトの(Maven)依存関係が多すぎるというだけで、OPと同様の要件がありました。幸いなことに、私にとって有効な唯一の解決策は、Eclipse
. 非常にシンプルで非常に簡単です。これはOPの解決策ではありませんが、同様の要件を持っているが多くのMaven依存関係がある人のための解決策です.
1)プロジェクトフォルダー(Eclipse内)を右クリックして選択しますExport
2) 次に選択Java
->Runnable Jar
3) jar ファイルの場所を選択するよう求められます。
4) 最後に、実行する Main メソッドを持つクラスを選択し、選択Package dependencies with the Jar file
してクリックします。Finish
これもオプションになる可能性があります.jarファイルを構築できます
<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>
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>
それでおしまい。次の mvn パッケージでは、すべての依存関係の jar を含む 1 つのファット jar も追加で作成されます。
maven-assembly-plugin は私にとってはうまく機能しました。maven-dependency-plugin で何時間も費やしましたが、うまくいきませんでした。主な理由は、構成セクションで、ドキュメントに記載されているように含める必要があるアーティファクト項目を明示的に定義する必要があったためです。次のように使用したい場合の例がありますmvn dependency:copy
。ここでは、artifactItems は含まれていませんが、機能しません。