Javaでのjarファイルの作成と実行のガイド

1. 概要

通常、多くのJavaクラスファイルを1つのアーカイブファイルにバンドルすると便利です。
このチュートリアルでは、Javaでのjarファイルまたは__J__ava __AR__chiveファイルの操作の内外について説明します。 *
具体的には、単純なアプリケーションを使用して、jarとしてパッケージ化して実行するさまざまな方法を検討します。 また、途中で** jarのマニフェストファイルを簡単に読み取る方法**などの好奇心にも答えます。

2. Javaプログラムのセットアップ

実行可能なjarファイルを作成する前に、アプリケーションにlink:/java-main-method[_main_ method]を持つクラスが必要です。 このクラスは、アプリケーションへのエントリポイントを提供します。
public static void main(String[] args) {
    System.out.println("Hello Baeldung Reader!");
}

3. ジャーコマンド

すべてのセットアップが完了したので、コードをコンパイルしてjarファイルを作成しましょう。
コマンドラインからlink:/javac[_javac_]でこれを行うことができます:
javac com/baeldung/jar/*.java
_javac_コマンドは、_JarExample.class_を_com / baeldung / jar_ディレクトリーに作成します。 これをjarファイルにパッケージ化できます。

3.1. デフォルトの使用

  • jarファイルを作成するには、_jar_コマンドを使用します。*

    _jar_コマンドを使用してjarファイルを作成するには、_c_オプションを使用してファイルを作成していることを示し、_f_オプションを使用してファイルを指定する必要があります。
jar cf JarExample.jar com/baeldung/jar/*.class

3.2. メインクラスの設定

jarファイルマニフェストにメインクラスを含めると便利です。
マニフェストは、_META-INF_ディレクトリにある_MANIFEST.MF_という名前のjarファイル内の特別なファイルです。 *マニフェストファイルには、jarファイル内のファイルに関する特別なメタ情報が含まれています。*
マニフェストファイルを使用してできることのいくつかの例には、エントリポイントの設定、バージョン情報の設定、クラスパスの構成が含まれます。
_e_オプションを使用すると、エントリポイントを指定できます。_jar_コマンドは、生成されたマニフェストファイルに追加します。
エントリポイントを指定して_jar_を実行しましょう。
jar cfe JarExample.jar com.baeldung.jar.JarExample com/baeldung/jar/*.class

3.3. コンテンツの更新

クラスの1つを変更し、再コンパイルしたとしましょう。 次に、jarファイルを更新する必要があります。
_jar_コマンドと__u __optionを使用して、その内容を更新しましょう。
jar uf JarExample.jar com/baeldung/jar/JarExample.class

3.4. マニフェストファイルの設定

場合によっては、マニフェストファイルの内容をより詳細に制御する必要があります。 _jar_コマンドは、独自のマニフェスト情報を提供する機能を提供します。
_example_manifest.txt_という名前の部分的なマニフェストファイルをアプリケーションに追加して、エントリポイントを設定しましょう。
Main-Class: com.baeldung.jar.JarExample
提供するマニフェスト情報は、jarコマンドが生成するものに追加されるため、ファイルに必要な唯一の行です。
*マニフェストファイルを*改行*で終了することが重要です。 改行がないと、マニフェストファイルは黙って無視されます。
その設定で、マニフェスト情報と__m __optionを使用してjarを再度作成しましょう。
jar cfm JarExample.jar com/baeldung/jar/example_manifest.txt com/baeldung/jar/*.class

3.5. 詳細な出力

_jar_コマンドからより多くの情報が必要な場合は、verb_v_オプションを追加して詳細を表示するだけです。
_v_オプションを指定して_jar_コマンドを実行しましょう。
jar cvfm JarExample.jar com/baeldung/jar/example_manifest.txt com/baeldung/jar/*.class
added manifest
adding: com/baeldung/jar/JarExample.class(in = 453) (out= 312)(deflated 31%)

4. Mavenを使用する

4.1. デフォルト設定

Mavenを使用してjarを作成することもできます。 Mavenは設定よりも規約を優先するため、packageを実行してjarファイルを作成できます。
mvn package
デフォルトでは、jarファイルはプロジェクトのターゲットフォルダーに追加されます。

4.2. メインクラスを示す

Mavenを構成してメインクラスを指定し、wwwhttps://www.baeldung.com/executable-jar-with-maven [executable jar file]を作成することもできます。
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <version>${maven-jar-plugin.version}</version>
    <configuration>
        <archive>
            <manifest>
                <mainClass>com.baeldung.jar.JarExample</mainClass>
            </manifest>
        </archive>
    </configuration>
</plugin>

5. Spring Bootを使用する

5.1. Mavenとデフォルトの使用

MavenでSpring Bootを使用している場合、まず、_pom.xml_ファイルでパッケージ設定が_war_ではなく_jar_に設定されていることを確認する必要があります。
<modelVersion>4.0.0</modelVersion>
<artifactId>spring-boot</artifactId>
<packaging>jar</packaging>
<name>spring-boot</name>
設定が完了したら、_package_ゴールを実行できます。
mvn package

5.2. エントリポイントの設定

メインクラスの設定は、通常のJavaアプリケーションでのjarの作成とlink:/deployable-fat-jar-spring-boot[Spring Bootアプリケーションのfat jar]との違いを見つける場所です。 Spring Bootアプリケーションでは、https://www.baeldung.com/spring-boot-main-class [main class]は実際には_org.springframework.boot.loader.JarLauncher_です。
この例はSpring Bootアプリケーションではありませんが、https://www.baeldung.com/spring-boot-console-app [Spring Boot console application]に簡単に設定できます。
メインクラスを開始クラスとして指定する必要があります。
<properties>
    <start-class>com.baeldung.jar.JarExample</start-class>
    <!-- Other properties -->
</properties>
link:/gradle-fat-jar[Spring Boot fat jarを作成するためのGradle]も使用できます。

6. Jarの実行

jarファイルができたので、実行できます。 * _java_コマンドを使用してjarファイルを実行します。*

6.1. メインクラスの推測

マニフェストでメインクラスが指定されていることを確認したため、* _ java_コマンドの_-jar_オプションを使用して、メインクラスを指定せずにアプリケーションを実行できます。*
java -jar JarExample.jar

6.2. メインクラスの指定

*アプリケーションを実行するときにメインクラスを指定することもできます。
java -cp JarExample.jar com.baeldung.jar.JarExample
パッケージ形式の代わりにパス区切り文字を使用することもできます:
java -cp JarExample.jar com/baeldung/jar/JarExample

6.3. ジャーの内容のリスト

_jar_コマンドを使用して、jarファイルの内容をリストできます。
jar tf JarExample.jar
META-INF/
META-INF/MANIFEST.MF
com/baeldung/jar/JarExample.class

6.4. マニフェストファイルの表示

_MANIFEST.MF_ファイルの内容を知ることが重要になる可能性があるため、コマンドラインを離れることなく内容を覗くことができる迅速かつ簡単な方法を見てみましょう。
_unzip_コマンドと-pオプションを使用してみましょう。
unzip -p JarExample.jar META-INF/MANIFEST.MF
Manifest-Version: 1.0
Created-By: 1.8.0_31 (Oracle Corporation)
Main-Class: com.baeldung.jar.JarExample

7. 結論

このチュートリアルでは、_main_クラスを持つ単純なJavaアプリケーションを設定します。
次に、jarファイルを作成する3つの方法を検討しました。_jar_コマンドを使用して、MavenとMaven Spring Bootアプリケーションを使用します。
jarファイルを作成した後、コマンドラインに戻り、推論されたメインクラスを指定して実行しました。
また、ファイルの内容を表示する方法と、jar内の単一のファイルの内容を表示する方法も学びました。
平野https://github.com/eugenp/tutorials/tree/master/core-java-modules/core-java[Javaの例]とhttps://github.com/eugenp/tutorials/tree/master/の両方spring-boot [Spring Bootの例]はGitHubで入手できます。