← Spring コース
33. 3つの比較と Spring Boot との関係
同じ のアプリを3つの道具でビルドすると、どれも を に持つ ですが、中身は同じではありません。()と ()の は34本で名前も版も一致しました。++ では38本で、の無い 5本が入り、3本の版が の上書き前のままでした。
Boot のリファレンスは Maven か Gradle を勧め、Ant は not particularly well supported と書いています。手段はあって、リファレンスの Ant+Ivy の例を写したビルドで /hello は 200 でした。ただし例に resources の手順が無く、設定ファイルは入りません。1.0(Ant は 1.1)の年は Ant 2000、Maven 2004、Gradle 2012 です。
どれを使うかはプロジェクトが決めていて、読む側はルートに 、、(.kts)のどれがあるかで判断します。このセクションでは、手作業の5段から始めて3つの設定ファイルを1行ずつ読み、Ant の と Ivy、Maven のと依存解決、Gradle のと をログで追いました。違いは、置き場所・手順・依存を誰が決めるかです。
点線の付いた語はタップすると説明が出ます。用語集を開く →
同じソースsrc/main/java の2クラス + src/main/resources/application.properties
それぞれの Boot 公式の手段で実行可能 JAR にする
Mavenspring-boot-maven-plugin の repackage。jar:jar の後に包み直す
Gradleorg.springframework.boot プラグインの bootJar
Ant + Ivyspring-boot-antlib の exejar。Ivy が依存を lib/ へ取ってくる
出来た JAR の中身(BOOT-INF/lib の本数と版)
34本19,905,045 B / 170 エントリ。jarmode-tools 入り
34本(Maven と名前・版が完全一致)19,903,503 B / 167 エントリ
38本20,109,103 B / 168 エントリ。starter 5本入り、commons-logging 1.3.5・micrometer 1.16.7(この ivy.xml では BOM が効かない)、application.properties 無し
java -jar で起動(この回に起動したのは Ant 版だけ)
Ant 版: /hello → 200 {"message":"hello"}JarLauncher が Start-Class を起こす。application.properties が無いので起動ログに [demo] が出ない。Maven 版の起動は後のレッスンで、Gradle 版は未起動(エントリは Maven と一致)
- ・Boot 4.1.1 のリファレンス(Build Systems)の逐語: It is possible to get Spring Boot to work with other build systems (Ant, for example), but they are not particularly well supported. 同じページに Ant+Ivy の ivy.xml と build.xml の例があり、上の Ant 版はそれを写したものです
- ・Ant 版の build.xml はリファレンスの例そのままなので resources の手順が無く、BOOT-INF/classes にクラス2個だけが入りました。実務で使うなら、AntLib の文書の exejar の例にある入れ子要素 resources を足すことになります
- ・Ant の起動には -lib に spring-boot-antlib の JAR だけでなく、その実行時依存(spring-boot-loader-tools・spring-core など5本)も要りました。文書は antlib の JAR 1本しか書いていません
- ・Ant 版の BOOT-INF/lib にある starter 5本は、マニフェストと LICENSE だけで中身のクラスが無い JAR(Spring-Boot-Jar-Type: dependencies-starter)です。Maven と Gradle のプラグインはこれを除き、代わりに spring-boot-jarmode-tools を足していました。除く規則の一次ソースは未確認です
- ・Maven と Gradle のマニフェストには Spring-Boot-Version・Spring-Boot-Classpath-Index・Spring-Boot-Layers-Index がありますが、Ant 版には Main-Class・Start-Class・Spring-Boot-Classes・Spring-Boot-Lib だけです
- ・Gradle 1.0 のリリースノートには、依存の解決を Ivy から自前の仕組みに移した、とあります。Ant+Ivy と Gradle は依存の取り方の系譜でつながっていますが、BOM の扱いはこのとおり違います
- ・Maven 版の JAR の起動と起動時間は後のレッスンで測ります。この回の Ant 版の起動は1回だけの確認で、ログ中の秒数は共有環境での1回の値です
▶ サンプルコードを実行してみよう(自由に書き換えてOK)
Java
図やコードに出てくる用語(タップで説明)
サンプルコードで身につける(5本) →
学んだ概念を、素朴な例から実務寄りの例まで5つの具体例で確認します。
公式ドキュメントで詳しく ↗