HOWTO · Java

Java JAR ファイルの作成と実行

Java クラスをコンパイルし、実行可能な JAR にパッケージ化して java -jar で実行し、明示的なクラスパスで JAR からクラスを起動する方法を学びます。

このページの内容

Java JAR は、コンパイルされたクラスと関連リソースを 1 つのアーカイブにパッケージ化します。実行可能な JAR を作成して実行するには、main メソッドを持つクラスを作成し、javac でコンパイルし、Main-Class エントリ付きでパッケージ化してから、java -jar で起動します。

実行可能な Java JAR を作成して実行する

このソースファイルを src/MyClass.java に作成します。

public class MyClass {
    public static void main(String[] args) {
        System.out.println("Hello, World!");
    }
}

クリーンなプロジェクト ディレクトリから、mkdir -p out で出力ディレクトリを作成し、javac -d out src/MyClass.java でクラスをそこにコンパイルします。実行可能なアーカイブは jar cfe MyApplication.jar MyClass -C out . で作成します。c フラグはアーカイブを作成し、f はアーカイブファイル名を指定し、e はエントリポイントのクラスを設定します。このコマンドはマニフェストに Main-Class: MyClass を記録し、out にあるコンパイル済みファイルを追加します。

そのディレクトリから java -jar MyApplication.jar で実行します。println の呼び出しは、プログラムの実行時に引数を標準出力に書き込みます。

想定される出力:

Hello, World!

実行可能なマニフェストなしで JAR を実行する

クラスを自分で起動するのであれば、JAR に Main-Class エントリは必要ありません。エントリポイントなしで同じコンパイル済み出力を jar cf MyApplication.jar -C out . でパッケージ化し、起動時にアーカイブとクラス名の両方を指定します:java -cp MyApplication.jar MyClass。

ここで、-cp はクラスパスを設定し、MyClass は Java が呼び出すべき main メソッドを持つクラスを指定します。これは、アーカイブがライブラリである場合や、起動時にエントリポイントを選びたい場合に便利です。java -jar とは異なります。そちらはアーカイブのマニフェストに記録されたメインクラスを使用し、別途指定されたクラス名は使用しません。

JAR を検証し、よくある質問に対応する

アーカイブの内容を一覧表示するには jar tf MyApplication.jar を使用します。実行可能な JAR には MyClass.class と META-INF/MANIFEST.MF のマニフェストが含まれているはずです。そのマニフェストをアーカイブ ユーティリティで調べ、正確に Main-Class: MyClass というエントリが含まれていることを確認してください。クラスパスベースの JAR では、マニフェストにメインクラスを指定する必要はありませんが、-cp で指定するクラスがアーカイブ内または別のクラスパスの場所に存在しなければなりません。

JAR は、Java クラスファイル、リソース、メタデータのための ZIP ベースのアーカイブです。java -jar はマニフェストで指定されたクラスを起動し、java -cp ではクラスを直接指定できます。JAR のダブルクリックは、Java ランタイムと適切なファイル関連付けが設定されているデスクトップ システムでのみ機能する場合があります。ターミナルから起動すると、選択したコマンドと診断メッセージが表示されます。