Maven プロジェクトを単一の実行可能 JAR にパッケージ化する
Java プロジェクトを操作する場合、配布を容易にするために、アプリケーションを単一の実行可能な JAR ファイルにパッケージ化することが必要になることがよくあります。強力なビルド自動化ツールである Maven を使用すると、開発者はこの単一の出力 JAR 内に必要な依存関係をすべて含めることができます。
この記事では、すべての依存関係 JAR を最終的な実行可能 JAR に含めるように Maven プロジェクトを構成するために必要な手順を説明します。これらの手順に従うことで、展開プロセスが簡素化され、アプリケーションがさまざまな環境でスムーズに実行されるようになります。
指示 | 説明 |
---|---|
<plugin> | ビルドプロセス中に使用する Maven プラグインを定義します。プラグインは、コードのコンパイルやプロジェクトのパッケージ化などの特定のタスクを実行できます。 |
<groupId> | Maven プロジェクトのグループ識別子 (通常は逆引きドメイン名) を指定します。 |
<artifactId> | アーティファクトの識別子 (プロジェクトの名前) を定義します。 |
<version> | プロジェクトの現在のバージョンを示します。 |
<build> | プラグインやリソースを含む、プロジェクトのビルド構成が含まれます。 |
<descriptorRef> | Maven アセンブリ プラグインが使用する事前定義された記述子 (「jar-with-dependency」など) を参照します。 |
<mainClass> | JAR ファイルの実行時に実行されるメイン クラスを指定します。 |
<execution> | プラグイン内の実行ブロックを定義し、さまざまなビルド フェーズで実行されるタスクを指定します。 |
mvn clean package | プロジェクトをクリーンアップし、すべての依存関係を含む JAR ファイルにパッケージ化するコマンド。 |
java -jar target/...jar | JAR へのパスを指定して、生成された JAR ファイルを実行するコマンド。 |
Maven を使用した実行可能 JAR の作成と実行
上記で提供されたスクリプトは、すべての依存関係を単一の実行可能な JAR ファイルにパッケージ化するように Maven プロジェクトを構成する方法を示しています。最初のスクリプトは Maven です pom.xml ファイルには、プロジェクトの構成が含まれます。このファイル内では、 <plugin> タグは、Maven アセンブリ プラグインを定義するために使用されます。このプラグインは、すべての依存関係を含む実行可能な JAR を作成するために重要です。の <descriptorRefs> プラグイン設定内のタグは、 jar-with-dependencies 記述子。これにより、プロジェクトのすべての依存関係が最終的な JAR ファイルにパッケージ化されます。の <mainClass> 中のタグ <manifest> このセクションは、JAR の実行時に実行するメイン メソッドがどのクラスに含まれているかを Maven に伝えるため、必須です。
の <execution> プラグイン設定内のブロックでアクションが発生します。プラグインの目標を指定します single 期間中に実行する必要があります package ビルドライフサイクルのフェーズ。これにより、依存関係を含む JAR ファイルの作成がトリガーされます。 2 番目のスクリプトは、単純なコマンド ライン命令です。 mvn clean package。このコマンドは、プロジェクトをクリーンアップし (以前のビルド成果物を削除し)、ソース コードをコンパイルし、テストを実行し、プロジェクトを JAR ファイルにパッケージ化します。最終的な JAR ファイルは次の場所にあります。 target プロジェクトのディレクトリに基づいて名前が付けられます。 artifactId そして version に指定されている pom.xml。
Maven を使用した依存関係を含む実行可能 JAR ファイルの作成
Maven 構成スクリプト
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>my-app</artifactId>
<version>1.0-SNAPSHOT</version>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.3.0</version>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<archive>
<manifest>
<mainClass>com.example.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>
Maven コマンドを実行して JAR をパッケージ化する
コマンドラインの説明
mvn clean package
# This command will compile the code, run the tests, and create the JAR file
# The JAR file will include all dependencies specified in the pom.xml
# It will be located in the target directory of the project
# The final JAR file will be named my-app-1.0-SNAPSHOT-jar-with-dependencies.jar
# To run the JAR file, use the following command:
java -jar target/my-app-1.0-SNAPSHOT-jar-with-dependencies.jar
# Ensure that the mainClass specified in the pom.xml is correct
# This will start your application with all dependencies included
依存関係をパッケージ化するための高度な Maven テクニック
Maven で実行可能 JAR を作成するための基本的な構成以外にも、ビルド プロセスを強化できる追加のテクニックがあります。そのようなテクニックの 1 つは、 shade の代わりにプラグイン assembly プラグイン。 Maven Shade Plugin は、uber-JAR (依存関係を含む JAR) を作成するためのより高度な機能を提供します。これにより、クラスパスの競合を回避するためにパッケージの名前を変更できるようになり、重複したクラスとリソースの処理が向上します。さらに、最終的な JAR にどの依存関係が含まれるかをきめ細かく制御できます。
もう 1 つの重要な側面は、JAR ファイルのサイズの管理です。大きな JAR ファイルは扱いにくく、転送や読み込みに時間がかかることがあります。の maven-shade-plugin 不要なファイルとクラスを除外できるため、最終的な JAR のサイズが削減されます。また、未使用のクラスや冗長リソースなどの重要でない情報を削除して、JAR を最小化するようにプラグインを構成することもできます。これらの高度な構成は、多数の依存関係がある大規模なプロジェクトで作業する場合に特に役立ちます。
Maven 実行可能 JAR に関する一般的な質問と解決策
- JAR でメインクラスを指定するにはどうすればよいですか?
- メインクラスを指定するには、 <mainClass> 内のタグ <manifest> Maven プラグイン設定のセクション。
- 最終的な JAR から特定の依存関係を除外するにはどうすればよいですか?
- 使用 excludes プラグイン設定内でタグを使用して、最終的な JAR に含めるべきではない依存関係を指定します。
- uber-JAR とは何ですか?
- uber-JAR は、コンパイルされたコードだけでなく、そのすべての依存関係も含まれる JAR ファイルです。
- JAR でのクラスパスの競合を回避するにはどうすればよいですか?
- の maven-shade-plugin 競合を避けるために、依存関係内のパッケージの名前を変更できます。
- 依存関係内の重複したクラスを処理するにはどうすればよいですか?
- を設定します。 maven-shade-plugin 最終的な JAR で重複を処理する方法を指定することで、重複したクラスとリソースを管理します。
- 依存関係から特定のファイルのみを含めることはできますか?
- はい、設定できます maven-assembly-plugin または maven-shade-plugin 依存関係の特定のファイルのみを含めるには。
- パッケージ化された JAR を実行するにはどうすればよいですか?
- 使用 java -jar コマンドの後に JAR ファイルへのパスを続けます。
- JAR ファイルの内容を確認するにはどうすればよいですか?
- 使用できます jar -tf JAR ファイルの内容を一覧表示するコマンド。
- JAR ファイルが大きすぎる場合はどうすればよいですか?
- 使用 maven-shade-plugin 不要なファイルを除外し、JAR サイズを最小限に抑えます。
Maven 実行可能 JAR についてのまとめ
Maven を使用して依存関係を含む実行可能 JAR を作成すると、Java アプリケーションのデプロイメントプロセスが簡素化されます。適切に設定することで、 pom.xml ファイルを作成し、Maven Assembly Plugin や Maven Shade Plugin などのプラグインを利用すると、開発者は必要な依存関係をすべて 1 つの JAR ファイルにパッケージ化できます。このアプローチにより、アプリケーションがさまざまな環境でシームレスに実行できるようになり、配布と実行が簡単になります。これらの手順に従うと、プロジェクトの依存関係を効果的に管理し、信頼性の高い実行可能な JAR ファイルを作成することができます。