Dev Study
← Spring コース

14. 成果物の単位: .class・JAR・WAR・実行可能 JAR

Java のは、小さい順に 、、そして か という単位で作られます。最小の .class は、やなどの型1つにつき1ファイルで、ソース1ファイルから複数できることもあります。JAR は .class をフォルダの階層ごと zip にまとめたもので、ライブラリを配る単位でもあります。ただし コマンドで普通に作る JAR には、は入りません。

WAR は Web アプリ1個分の入れ物で、自分の .class、依存の JAR、設定ファイルを決まった場所に入れます。 は無く、 などの に置いて動かしてもらいます。 は HTTP に応答する Java のクラスの決まりで、後のレッスンで扱います。 の実行可能 JAR は、依存の JAR と Tomcat まで中に入れ、 だけで動きます。

どの単位も OS が直接実行するファイルではありません。OS が起動するのは だけで、JAR はその java が読み、WAR はその java の上で動いている Tomcat が読みます。Rust は依存のライブラリまで結合した実行ファイル1つを作り、Node はソース一式と node_modules を運びます。既存のプロジェクトを読むときは、どの単位を作って何に渡しているのかを先に確かめると、全体をつかみやすくなります。

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

何を入れて、何に渡すか(右の → は渡す先)
.class型1つ分のバイトコード
JVM が読む
階層ごと zip にまとめる
JAR.class とマニフェスト。jar コマンドで作ると依存は入らない
java -cp または java -jar
自分の .class と依存の JAR を、決まった場所に詰める
WARWEB-INF/classes、WEB-INF/lib、WEB-INF/web.xml
Tomcat(java で動いている)に置く
実行可能 JARBOOT-INF/classes、BOOT-INF/lib、起動用のローダ
java -jar
  • ・マニフェストは JAR の中の META-INF/MANIFEST.MF という設定ファイルです。入口のクラス名(Main-Class)が書いてあると java -jar で起動できます
  • ・JAR の中に依存の JAR を入れても、JDK 標準のままでは読めません。実行可能 JAR が起動用のローダを持っているのはそのためで、後のレッスンで扱います
  • ・大きさの実例: 2クラスだけの JAR は 1,800 B、Spring MVC の WAR は 7,825,305 B(依存の JAR 11本入り)、Spring Boot 4.1.1 の実行可能 JAR は約 19.9 MB(依存の JAR 34本入り)でした。どれも文字列を返すだけの最小アプリの値です
  • ・Spring Boot は WAR も作れます。組み込みの Tomcat を WEB-INF/lib-provided に分けて入れた WAR は、java -jar でも、Tomcat に置いても動きました(各1回の確認)
  • ・複数の WAR などをさらにまとめる EAR という単位もあります(Jakarta EE のアプリケーションサーバ向け)。このコースでは名前だけにとどめます
  • ・下のコードは、1つのソースから .class が6個できることを自分で確かめます。表示されるバイト数は JDK の版で変わります

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

Java

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

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

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

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