← Spring コース
49. スターターと BOM
は、依存の宣言だけを運ぶほぼ空の です。spring-boot-starter-webmvc 4.1.1 の JAR は 4749 バイトで、中身はとライセンス文書だけ、は1つもありません。実体は に書かれた5つの依存で、そこから先の依存をたどった結果、実行時の依存を1つ書いただけのこのプロジェクトではに 39 個の JAR が並びました。
版を書かなくてよいのは、(版の一覧表)があるからです。プロジェクトの親のさらに親が で、 は 11.0.24 といった版がそこにまとめて書かれています。npm では各が受け入れる版の範囲を宣言し、解決した結果を lockfile が記録します。 では、組み合わせる版の一覧を Boot のリリースが先に決めて配っています。
数は数え方で変わります。BOM が管理する版は、版プロパティなら 195 個、直下のエントリなら 652 個、他の BOM を展開した後なら 1911 個でした。39 個も 4.1.1 の starter-webmvc での値です。なお spring-boot-starter-web は 4.1.1 の pom の説明に非推奨とあり、 が生成する pom には starter-webmvc が入ります。
点線の付いた語はタップすると説明が出ます。用語集を開く →
自分の pom.xml実行時の依存は spring-boot-starter-webmvc の1つ。版は書かない
Maven がスターターの pom を読む
スターターの JAR4749 バイト・クラス 0 個。pom に依存が5つ
JAR は空。意味があるのは pom の側5つの依存をさらにたどる
スターター 3つstarter / starter-jackson / starter-tomcat
モジュール 2つspring-boot-http-converter / spring-boot-webmvc
版は BOM(spring-boot-dependencies)の表から引く
実行時クラスパス 39 個spring-boot で始まるもの 14、Framework 7、Tomcat 3、Jackson 3、ログ関係 7 など
- ・39 は mvn dependency:build-classpath(実行時スコープ)で書き出した数です。テスト用の依存まで含めると 72 個でした
- ・39 個のうち6個はスターター自身で、どれもクラスを持たない 4.7KB 台の JAR でした
- ・版の表は pom の親をたどった先にあります: 自分の pom → spring-boot-starter-parent → spring-boot-dependencies
サンプルコード(フレームワーク環境が必要なため表示のみ)
// PlainApp.java — pom.xml に実行時の依存として書いたのは spring-boot-starter-webmvc の1つだけ
// (版の記述なし。ほかにテスト用の依存が1つある)。
// それでも下の import はすべて解決できる。右のコメントは、そのクラスが入っている JAR
package l17.plain;
import org.springframework.boot.SpringApplication; // spring-boot-4.1.1.jar
import org.springframework.boot.autoconfigure.SpringBootApplication; // spring-boot-autoconfigure-4.1.1.jar
import org.springframework.context.ConfigurableApplicationContext; // spring-context-7.0.9.jar
import tools.jackson.databind.json.JsonMapper; // jackson-databind-3.1.5.jar
@SpringBootApplication
public class PlainApp {
public static void main(String[] args) {
ConfigurableApplicationContext ctx = SpringApplication.run(PlainApp.class, args);
System.out.println("JsonMapper beans = " + java.util.List.of(ctx.getBeanNamesForType(JsonMapper.class)));
ctx.close();
}
}
// 出力(起動ログを除く):
// JsonMapper beans = [jacksonJsonMapper]
//
// 4つの JAR はどれも pom.xml には名前が出てこない。
// スターターの pom から依存をたどった先にあり、版は BOM が決めている。
図やコードに出てくる用語(タップで説明)
サンプルコードで身につける(5本) →
学んだ概念を、素朴な例から実務寄りの例まで5つの具体例で確認します。
公式ドキュメントで詳しく ↗