← Spring コース
36. クラスパスと JAR
は、が必要になると(探しに行く場所の一覧)から を探します。場所に指定するのはディレクトリか です。JAR は .class をまとめた zip で、先頭のバイトも zip と同じです。中の に入口のクラス名()を書いておくと、 で起動できます。
前のレッスンまでに見た Rust の Hello は実行ファイル1つでしたが、Java では自分の JAR との JAR が別々のファイルのまま、実行時にクラスパスで結び付きます。足りない JAR があると、実測では起動時ではなく、そのクラスを初めて使う行で になりました。java -jar で起動すると の指定が無視される点にも注意が要ります。
では依存の JAR を自分の JAR の中に入れて1ファイルにできるかというと、 標準のままでは読めませんでした。中に greet.jar を入れた JAR を java -jar で起動すると同じエラーになり、の に書いても変わりません。隣に本物のファイルとして置けば動きます。 のがこの点をどうしているかは、後のレッスンで扱います。
点線の付いた語はタップすると説明が出ます。用語集を開く →
java -cp app.jar:greet.jar app.Main探す場所を : で区切って並べる(Windows では ;)
クラスが必要になるたび
アプリケーションクラスローダクラスパスの場所から .class を探す
探す場所
app.jarapp/Main.class
greet.jargreet/Greeter.class
JAR の中の JARlib/greet.jar は探されなかった
- ・java マニュアルは -jar について「other class path settings are ignored」と書いています。-jar と -cp を併用しても -cp 側は使われません
- ・マニフェストの Class-Path に書いた相対パスは、JAR の外のファイルとして探されました(隣に greet.jar を置くと成功、JAR の中に入れると失敗)
- ・入れ子の JAR を読めないと JAR の仕様が直接書いているわけではありません。JDK 25 の標準のローダで試した結果です
▶ サンプルコードを実行してみよう(自由に書き換えてOK)
Java
図やコードに出てくる用語(タップで説明)
サンプルコードで身につける(5本) →
学んだ概念を、素朴な例から実務寄りの例まで5つの具体例で確認します。
公式ドキュメントで詳しく ↗