← Spring コース
15. ツール無しで手でビルドする
が無くても、 に入っている3つのコマンドでビルドできます。 out でソースを にし、 で にまとめ、 で起動します。 は、ソース先頭の (が属する名前空間の名前。後のレッスンで扱います)どおりのフォルダを out の下に作ります。jar は、入口のクラス名を JAR の中の設定ファイル()に書き込みます。
外部のライブラリを使うと手間が増えます。JAR を自分でダウンロードして lib に置き、コンパイル時にも実行時にも (。クラスを探す場所の一覧)に書きます。npm install がやってくれる作業を人がやる形です。( の本体。 はこの上に乗ります)を 無しで動かしたときは、依存の一覧を手で辿って9本の JAR を集めました。
困るのは、JAR が足りないことにコンパイルで気づけるとは限らない点です。コンパイラが型を調べるときに必要になる JAR は、無ければコンパイルが失敗します。しかし Spring の内部だけが使う JAR は、無くてもコンパイルが通り、実行して初めてクラスが見つからずに落ちます。、Maven、 といったビルドツールが肩代わりしているのは、この手作業の一部または全部です。
点線の付いた語はタップすると説明が出ます。用語集を開く →
src/com/example/app/Main.javapackage com.example.app;
src/com/example/greet/Greeter.javapackage com.example.greet;
javac -d out(コンパイル)
out/com/example/…/*.classpackage どおりの階層に .class が2個
jar --create --file app.jar --main-class com.example.app.Main -C out .
app.jar1,800 B。.class 2個とマニフェスト
java -jar app.jar
出力: Hello, world!
- ・JDK 25(Temurin 25.0.4.1)での実行です。コマンドと出力の全文はサンプル集にあります
- ・依存の JAR は自分の app.jar には入りません。マニフェストに何も足していないこの app.jar では、java -jar app.jar は失敗し、java -cp app.jar:lib/… のように並べて入口のクラスを名指しすると動きました。マニフェストに Class-Path という行で JAR の場所を書けば java -jar でも動きますが、JAR を別のファイルとして置いておく点は変わりません
- ・Spring の9本は、spring-context 7.0.9 が公開している依存の一覧(POM)を手で辿ったものです。1本ずつ抜いて試すと(各1回)、コンパイルが失敗したのは3本、コンパイルは通って実行で落ちたのが3本、抜いても動いたのが3本でした。動いた3本も不要とは言えません。エラーが起きた経路や Web アプリでは必要になりました
- ・Spring Boot 4.1.1 の最小の Web アプリの成果物には、依存の JAR が 34本入っていました。これを手で集めて -cp に書く代わりに、ビルドツールが集めて組み立てます
サンプルコード(フレームワーク環境が必要なため表示のみ)
// ファイル1: src/com/example/greet/Greeter.java
package com.example.greet;
public class Greeter {
public String greet(String name) {
return "Hello, " + name + "!";
}
}
// ファイル2: src/com/example/app/Main.java
package com.example.app;
import com.example.greet.Greeter;
public class Main {
public static void main(String[] args) {
System.out.println(new Greeter().greet("world"));
}
}
// この2ファイルを JDK のコマンドだけでビルドして動かす(JDK 25 での実行結果)
// $ javac -d out $(find src -name "*.java")
// -> out/com/example/app/Main.class と out/com/example/greet/Greeter.class ができる
// $ jar --create --file app.jar --main-class com.example.app.Main -C out .
// -> app.jar ができる
// $ java -jar app.jar
// Hello, world!
図やコードに出てくる用語(タップで説明)
サンプルコードで身につける(5本) →
学んだ概念を、素朴な例から実務寄りの例まで5つの具体例で確認します。
公式ドキュメントで詳しく ↗