Dev Study
← Spring コース

5. JAR・WAR・マニフェスト・実行可能 JAR

(Java Archive、拡張子 )は、 や設定ファイルを1つにまとめた zip 形式のファイルです。ライブラリを配る単位であり、アプリを配る単位でもあります。Node で近いのは、を1つにまとめたファイルです。ただし npm は node_modules に展開してから使いますが、JAR は展開せず、 がそのまま中を読みます。入っているのもコンパイル済みの .class です。

JAR の中の がで、ここに があれば で起動できます。(Web ARchive)は Web アプリを などのサーバに渡す形で、 に .class と を入れます。 は、依存の JAR も入れて java -jar だけで動く JAR で、 が作ります。

拡張子では、ライブラリの JAR とアプリの JAR を区別できません。 コマンドで作った JAR には、依存ライブラリも依存の一覧も入りません。package.json に依存を書く npm パッケージとは違います。実行可能 JAR は fat JAR や uber JAR と呼ばれることもあります。 は複数の WAR などをまとめる形で、名前だけ触れます。WAR や EAR に当たるものは Node にありません。

点線の付いた語はタップすると説明が出ます。用語集を開く →

入れ物と中身(右の → は渡す先)
.class と設定ファイルコンパイルの結果
zip 形式で1つにまとめる
JARMETA-INF/MANIFEST.MF(マニフェスト)と、パッケージ名どおりのフォルダに入った .class
java -cp か java -jar
自分の .class と依存の JAR を、決まったフォルダに詰める
WARWEB-INF/classes に自分の .class、WEB-INF/lib に依存の JAR
Tomcat などのサーバに置く
実行可能 JARBOOT-INF/classes に自分の .class、BOOT-INF/lib に依存の JAR
java -jar
  • ・JAR は Java Archive の略です(JDK 25 の jarsigner という道具の説明の表記)。JAR の仕様自体には展開形が無く、Jakarta EE の仕様は Jakarta Archive (JAR) と書いています。JAR の仕様(JDK 25)は、JAR を、任意で META-INF フォルダを持つ zip ファイルだと説明しています。META-INF は JAR の中の説明用のフォルダの名前で、マニフェストは JAR の説明書きに当たるファイルです
  • ・WEB-INF は WAR の中の決まったフォルダ名で、ここに置いたものがサーバに読まれます。ブラウザから WEB-INF の中を直接取りに行くと 404 が返ります。WAR は Web ARchive(Servlet の仕様の表記)、EAR は Enterprise ARchive(Jakarta EE の仕様の表記)の略です
  • ・Tomcat は HTTP を受け付けるサーバで、それ自体が Java のプログラムです。Servlet は、そのサーバから呼ばれるクラスの決まりです。どちらも後のレッスンで扱います
  • ・BOOT-INF は Spring Boot が決めたフォルダ名です。Spring Boot 4.1.1 の最小の Web アプリでは、BOOT-INF/lib に依存の JAR が 34 本入っていました
  • ・Spring Boot のリファレンスは、実行可能 JAR が uber jars や fat jars と呼ばれることがある、と書いています。ただし同じリファレンスは、全部の JAR の .class を1つに混ぜた JAR(shaded jar)のことも uber jar と呼び、JAR の中に JAR をそのまま入れる Spring Boot の作り方と区別しています。Spring Boot そのものは後のレッスンで扱います
  • ・Spring Boot は、java -jar でも Tomcat に置いても動く WAR も作れます。WAR は必ずサーバに置くもの、とは言い切れません
  • ・Maven というビルドツール(後のレッスンで扱います)で作った JAR には、pom.xml という定義ファイルの写しが入っていることがあります。
  • ・npm パッケージとの対応は役割のたとえです。下のコードは、JAR を1つメモリ上に作り、普通の zip として読み直します

▶ サンプルコードを実行してみよう(自由に書き換えてOK)

Java

図やコードに出てくる用語(タップで説明)

サンプルコードで身につける(5本) →

学んだ概念を、素朴な例から実務寄りの例まで5つの具体例で確認します。

公式ドキュメントで詳しく ↗