JAR ファイル形式とは?
拡張子が .jar のファイルは、Java プラットフォームでコンパイル済みの .class ファイル、メタデータ、および画像、テキストファイル、設定データなどのリソースを単一のポータブルなパッケージにまとめるために使用される ZIP アーカイブ です。この形式は JDK 1.1 で導入され、現在も Java ライブラリやアプリケーションの主要な配布単位となっています。
.jar ファイルは、その META-INF/MANIFEST.MF ファイルに Main-Class エントリが指定されている場合、スタンドアロンの実行ファイルとして機能します。java -jar file.jar で起動されると、JVM はこの属性を読み取って指定されたクラスを開始します。これにより、開発者は互換性のあるランタイムがインストールされている任意のシステムで動作する完全なアプリケーションを、単一のファイルとして提供できます。アーカイブ内の各エントリは DEFLATE アルゴリズムを使用して個別に圧縮することもでき、パッケージサイズを削減しながら、個々のファイルへの高速なランダムアクセスを可能にします。
.jar が保持するメタデータの中で、META-INF/MANIFEST.MF ファイルは最も重要です。これはパッケージの使用方法を定義し、Class-Path を介してクラスパスの依存関係をリストし、セキュリティ属性を含めることができます。デジタル署名は、マニフェスト自体ではなく、META-INF/ 内に個別の .SF および .DSA/.RSA ファイルとして保存されます。Java 9 ではさらに 2 つの機能が導入されました。マルチリリース JAR はバージョン固有のクラスオーバーライドを META-INF/versions/N/ の下に配置し、モジュール化 JAR はアーカイブのルートに module-info.class を含めます。
.jar ファイルの内容を閲覧または抽出するには、標準の ZIP 解凍ツールを使用して、通常のアーカイブと同じ操作を行うことができます。拡張子を .zip に変更しても同様に機能します。また、JDK に含まれている jar コマンドを使用することもできます:
- 内容のリスト表示:
jar -tf file.jar - 抽出:
jar -xf file.jar - 実行(実行可能な場合):
java -jar file.jar
関連するサーバー側のアーカイブ形式には、Web アプリケーション用の .war ファイルやエンタープライズアプリケーション用の .ear ファイルがあり、どちらも同じ ZIP ベースの構造で構築されています。
セキュリティと安全性
リスク: MEDIUM実行可能な JAR は実際のプログラムです。Java がインストールされている場合、«java -jar» はユーザーの権限で含まれているコードを実行します。そのため、不明な JAR にはマルウェア(Java RAT やトロイの木馬など)が含まれている可能性があります。ダウンロードした JAR は .exe と同様に扱い、信頼できるソースからのものだけを実行し、未承諾の .jar 添付ファイルには注意してください。単に ZIP (7-Zip) として検査することは安全ですが、実行することにはリスクが伴います。JAR はコード署名されている場合がありますが、署名は出自を証明するだけであり、安全性を保証するものではありません。
形式の詳細
概要JAR ファイルを開くプログラム
技術的詳細
詳細仕様| コンテナ形式 | ZIP アーカイブ - オフセット 0 で標準の ZIP ファイルと共通の `PK` (`50 4B 03 04`) マジックバイトを共有 |
| MIME タイプ | `application/java-archive` |
| 必須の内部ファイル | `META-INF/MANIFEST.MF` - 必須。メタデータ、クラスパス、および実行時の動作を制御 |
| 実行可能 JAR のトリガー | `MANIFEST.MF` 内の `Main-Class` 属性。`java -jar file.jar` で起動 |
| ペイロードのバイトコード形式 | JVM バイトコードを含むコンパイル済みの `.class` ファイル - プラットフォームに依存せず、ネイティブマシンコードではない |
| エントリごとの圧縮 | DEFLATE アルゴリズム(ZIP と同じ)。個々のエントリは、高速なランダムアクセスのために非圧縮で保存されることもある |
| デジタル署名 | `META-INF/` 内に保存される、`.SF` 署名ファイルと `.DSA` または `.RSA` キーファイルのペア |
| クラスパスの宣言 | 実行時の解決のために、スペース区切りの依存 JAR をリストする `Class-Path` マニフェスト属性 |
| マルチリリース JAR (MR-JAR) | Java 9 以降。新しい JVM が適切なバイトコードを選択できるように、`META-INF/versions/N/` の下にバージョン固有のクラスオーバーライドを配置 |
| モジュール記述子 (JPMS) | モジュール化された JAR はアーカイブのルートに `module-info.class` を含み、Java 9 以降のモジュールシステムを有効にする |
| パッケージの封印 (Sealing) | マニフェストの `Sealed: true` は、実行時に他の JAR が同じパッケージにクラスを注入することを防ぐ |
| Uber/Fat JAR | すべての依存 JAR を埋め込んだ自己完結型の配布バリアント。Spring Boot Loader などのカスタムクラスローダーが必要 |
| リリース日 | 1996-1997 (JDK 1.1) |
| オープンスタンダード | はい · ロイヤリティフリー |
| 仕様書 | docs.oracle.com |
JAR の変換
コミュニティ Q&A
ユーザーからの質問まだ質問はありません。JAR ファイルについて最初の質問をしてみましょう。