Dev Study
← Spring コース

57. Maven と Gradle がビルドでやっていること

は「 までの(段階)を順に進める」という指示です。各フェーズにはの(実際の作業)が割り当てられ、実ログでは 、resources、compile、testResources、testCompile、test、、 の順に8つ動きました。 を呼ぶのはそのうち2つで、最後の repackage だけが 由来です。

依存もプラグインも、初回にリモートから取って(手元の保管場所)に置きます。空の状態から mvn package を1回実行すると、533ファイルを取得し、 は171本になりました。実行時に使う JAR は34本で、残りはテスト用の依存と、プラグインやその依存です。ビルドの道具も依存と同じ仕組みで取ってくるわけです。

は同じ仕事をとして持ち、入力が変わっていないタスクは として飛ばします。また、と呼ぶ常駐の をビルドの後も残して使い回します。待機中のメモリは1回の観測で 841,768 KB でした。 は変更が無くてもテストを毎回実行しました。なお、サンプル集のログで --- で始まる行はゴールで、package のようなフェーズとは別物です。

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

./mvnw clean package で動いたゴールの順(Maven 3.9.16 / Boot 4.1.1 の実ログをもとに作図)
clean:cleantarget を消す(clean ライフサイクル)
ここから default ライフサイクル
resources:resources設定ファイルを target/classes へ
compiler:compilejavac で2ファイル
テスト用にもう一度
resources:testResourcesテスト用の資源
compiler:testCompilejavac で1ファイル
surefire:test別の JVM でテストを実行
package フェーズ
jar:jar自分のクラスだけの JAR(3,269 バイト)
Spring Boot のプラグインが包み直す
spring-boot:repackage依存34本とローダを足す(19,905,070 バイト)
元の JAR は .jar.original に改名
  • ・clean:clean は clean ライフサイクルの、それ以外(repackage を除く)は jar パッケージングの既定の割り当てです
  • ・Gradle の clean build では clean、compileJava、processResources、classes、resolveMainClassName、bootJar、jar、assemble、compileTestJava、testClasses、test、check、build の順でした
  • ・Gradle では実行可能 JAR を作るのは bootJar タスクで、包む前の JAR は -plain.jar という名前で残ります

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

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

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

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