【じゃーふぁいる】

JARファイル とは?

💡 Javaアプリを「まとめてパッケージ」にしたアーカイブファイル
📌 このページのポイント
JARファイルのパッケージング構造 コンパイル後のファイル Main.class Utils.class Config.class config.xml MANIFEST.MF ZIP圧縮 app.jar Main.class Utils.class Config.class + config.xml META-INF/MANIFEST.MF メインクラス、バージョン情報 JAR = Java ARchive。複数のクラスファイルを1つにまとめて配布・実行
JARファイルのイメージ
ひよこ ひよこ

JARファイルって何?

ペンギン先生 ペンギン先生

Javaプログラムをまとめたパッケージファイルだよ。複数の.classファイル(Javaコンパイル済みファイル)と設定ファイルをZIP形式でまとめたもの。「java -jar myapp.jar」で実行できる。

ひよこ ひよこ

ZIPと何が違うの?

ペンギン先生 ペンギン先生

フォーマット的にはZIPと同じ(解凍もできる)。JARには「META-INF/MANIFEST.MF」というメタファイルが追加されていて、メインクラス(どこから実行するか)などの情報が書いてある。

ひよこ ひよこ

SpringBootがfat JARって何?

ペンギン先生 ペンギン先生

通常のJARはアプリのコードだけ含む。「fat JAR(uber JAR)」は依存するすべてのライブラリも1つのJARに含める。これで「java -jar spring-app.jar」だけで全ての依存関係が揃った状態で実行できる。Dockerのイメージに入れやすくて便利。

ひよこ ひよこ

WARファイルやEARファイルとJARの違いは?

ペンギン先生 ペンギン先生

全部ZIPベースのJavaパッケージだよ。JARはライブラリやスタンドアロンアプリ、WARはWebアプリケーション(TomcatなどのServletコンテナデプロイする)、EARはJAR+WARをまとめたエンタープライズアプリ。ただし最近はSpring Bootのfat JARでWARなしで動かすのが主流で、EARはレガシーな印象があるね。

ひよこ ひよこ

JARファイルのバージョン管理ってどうやるの?

ペンギン先生 ペンギン先生

MavenGradleというビルドツールがJARの依存関係とバージョンを管理してくれるよ。pom.xmlやbuild.gradleに「この名前のバージョンいくつを使う」と書くだけで、Maven Centralリポジトリから自動ダウンロードされる。npmのpackage.jsonのJava版と考えるとわかりやすいね。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
JARファイルって出てきたら「Javaアプリをまとめたアーカイブファイル(ZIPベース)、java -jarで実行できる」と思えばOK!
📖 おまけ:英語の意味
「Java ARchive」 = Javaアーカイブ
💬 ZIPアーカイブ技術を流用してJava固有のメタデータ(MANIFEST.MF)を追加したもの。WAR(Web ARchive)・EAR(Enterprise ARchive)もJARの派生
← 用語集にもどる