Dev Study
← Spring コース

29. Maven: ライフサイクル・フェーズ・ゴール・プラグインの関係

で動くのは という作業ではなく、validate から package までのに割り当てられたです。は ・・site の3つで、default には validate、compile、test、package、install、deploy を含む23のフェーズが並びます。 のプロジェクトでは、そのうち8つにだけゴールが割り当てられています。

割り当てが無いフェーズでは何も起きません。 では --- の行が出ません。mvn package では resources から jar までの6つに、雛形が宣言した の を加えた7つです。 と書くとフェーズを進めずその1つが動きました。先にフェーズを走らせるゴール()もあります。

プラグインは、依存と同じ置き場に同じ規則で落ちてくる です。 -Dplugin=compiler では、公式の説明が挙げる compile と testCompile に help を足した3つのゴールが見えます。-Dcmd=package はフェーズとゴールの対応表を出しますが、表示される版は 組み込みの既定で、実際に走った版と違いました。版はログの --- の行で読みます。

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

mvn package で何が動くか: default ライフサイクルの23フェーズと、jar のプロジェクトでゴールが割り当てられたフェーズ(Maven 3.9.16 / Boot 4.1.1 の実ログ)
mvn package「package フェーズまで進めよ」という指示。package という作業があるわけではない
npm run build と違い、順番は Maven が持っている
default ライフサイクルを validate から順に
validate 〜 generate-resources5フェーズ。ゴールの割り当て無し。何も起きない
process-resourcesresources:resources(application.properties を target/classes へ)
compilecompiler:compile(javac)
process-test-resourcesresources:testResources
test-compilecompiler:testCompile
testsurefire:test。-DskipTests でも行は出て、中で飛ばす
packagejar:jar → spring-boot:repackage(雛形が宣言した Boot プラグイン。割り当ては親 POM の設定)
verify / install / deployここまで進まない。mvn install なら install:install が加わる
ゴールの実体
プラグイン JAR~/.m2/repository/org/apache/maven/plugins/maven-compiler-plugin/3.15.0/maven-compiler-plugin-3.15.0.jar など。依存と同じ置き場・同じ規則
  • ゴールを示すログの行は --- resources:3.5.0:resources (default-resources) @ demo --- の形。フェーズ名はログに出ない。surefire はテストを走らせるプラグイン
  • 割り当ての無いフェーズ(process-classes、prepare-package など)は図から省いた
  • mvn dependency:tree のように plugin:goal で書くと、そのゴールが (default-cli)(コマンドラインから直接呼んだ実行の名前)として動く。tree と compiler:compile ではフェーズは進まなかった。dependency:analyze は公式の説明どおり先に test-compile を実行する
  • help:describe -Dcmd=package が出す対応表の版(resources 3.4.0 など)は Maven 組み込みの既定で、実際に走った版(3.5.0。親 POM が決めた)と違う。spring-boot:repackage も表には出ない

▶ サンプルコードを実行してみよう(自由に書き換えてOK)

Java

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

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

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

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