1. 概要

通常、多くのJavaクラスファイルを1つのアーカイブファイルにバンドルすると便利です。

このチュートリアルでは、 Java内のjarファイルまたはJavaアーカイブファイルの操作の詳細。 

具体的には、単純なアプリケーションを使用して、それをjarとしてパッケージ化して実行するさまざまな方法を検討します。 また、jarのマニフェストファイルを簡単に読み取る方法などのいくつかの好奇心にも答えます。

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

実行可能なjarファイルを作成する前に、アプリケーションにmainメソッドを持つクラスが必要です。 このクラスは、アプリケーションへのエントリポイントを提供します。

public static void main(String[] args) {
    System.out.println("Hello Baeldung Reader!");
}

3. Jarコマンド

これですべての設定が完了したので、コードをコンパイルしてjarファイルを作成しましょう。

これは、コマンドラインからjavacを使用して実行できます。

javac com/baeldung/jar/*.java

javac コマンドは、 com / baeldung /jarディレクトリにJarExample.classを作成します。 これで、これを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オプションとともに使用して、内容を更新してみましょう。

jar uf JarExample.jar com/baeldung/jar/JarExample.class

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

場合によっては、マニフェストファイルの内容をより細かく制御する必要があります。 jar コマンドは、独自のマニフェスト情報を提供するための機能を提供します。

example_manifest.txt という名前の部分的なマニフェストファイルをアプリケーションに追加して、エントリポイントを設定しましょう。

Main-Class: com.baeldung.jar.JarExample

提供するマニフェスト情報は、jarコマンドが生成するものに追加されるため、ファイルに必要なのはこの情報だけです。

マニフェストファイルを改行で終了することが重要です。 改行がないと、マニフェストファイルは黙って無視されます。

その設定で、マニフェスト情報とmオプションを使用してjarを再度作成しましょう。

jar cfm JarExample.jar com/baeldung/jar/example_manifest.txt com/baeldung/jar/*.class

3.5. 冗長出力

jar コマンドからさらに情報が必要な場合は、冗長化のために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ファイルはプロジェクトのtargetフォルダーに追加されます。

4.2. メインクラスを示す

メインクラスを指定して実行可能jarファイルを作成するようにMavenを構成することもできます。

<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. スプリングブートの使用

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>

構成がわかったら、パッケージの目標を実行できます。

mvn package

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

メインクラスを設定すると、通常のJavaアプリケーションでjarを作成する場合と、SpringBootアプリケーション用のfatjarを作成する場合の違いがわかります。 Spring Bootアプリケーションでは、メインクラスは実際にはorg.springframework.boot.loader.JarLauncherです。

この例はSpring Bootアプリケーションではありませんが、Spring Bootコンソールアプリケーションとして簡単に設定できます。

メインクラスを開始クラスとして指定する必要があります。

<properties>
    <start-class>com.baeldung.jar.JarExample</start-class>
    <!-- Other properties -->
</properties>

Gradleを使用してSpringBootファットjarを作成することもできます。

6. 瓶を実行します

jarファイルを取得したので、それを実行できます。 javaコマンドを使用してjarファイルを実行します。

6.1. メインクラスを推測する

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

java -jar JarExample.jar

6.2. メインクラスの指定

アプリケーションの実行時にメインクラスを指定することもできます。-cp オプションを使用して、jarファイルがクラスパスにあることを確認してからメインクラスを提供できます package.className 形式:

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を使用する方法、およびMavenSpringBootアプリケーションを使用する方法です。

jarファイルを作成した後、コマンドラインに戻り、推測され指定されたメインクラスを使用して実行しました。

また、ファイルの内容を表示する方法と、jar内の単一のファイルの内容を表示する方法も学習しました。

プレーンなJavaの例SpringBootの例の両方がGitHubで入手できます。