Dev Study
← 解説「Maven: ライフサイクル・フェーズ・ゴール・プラグインの関係」に戻る

サンプルコードで身につける: Maven: ライフサイクル・フェーズ・ゴール・プラグインの関係

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

1mvn validate / compile / package で動いたゴール(--- の行)

同じ雛形で、指定するを変えて実行したときに出た --- の行だけを抜き出しました。validate では1本も出ず、compile では2本、 では7本です。行の形は :版: (実行の id) @ プロジェクト名 で、フェーズ名はログに出ません。 はテストを走らせるプラグインです。強調した最後の1本だけが 由来で、雛形の が宣言したプラグインのゴールです。

$ mvn validate / mvn compile / mvn package(--- の行と結果だけを抜粋)コマンド出力
$ mvn validate
[INFO] BUILD SUCCESS
[INFO] Total time: 0.103 s
 
$ mvn compile
[INFO] --- resources:3.5.0:resources (default-resources) @ demo ---
[INFO] --- compiler:3.15.0:compile (default-compile) @ demo ---
[INFO] BUILD SUCCESS
 
$ mvn package
[INFO] --- resources:3.5.0:resources (default-resources) @ demo ---
[INFO] --- compiler:3.15.0:compile (default-compile) @ demo ---
[INFO] --- resources:3.5.0:testResources (default-testResources) @ demo ---
[INFO] --- compiler:3.15.0:testCompile (default-testCompile) @ demo ---
[INFO] --- surefire:3.5.6:test (default-test) @ demo ---
[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
[INFO] --- jar:3.5.1:jar (default-jar) @ demo ---
[INFO] Building jar: /bt/l4-pom/demo/target/demo-0.0.1-SNAPSHOT.jar
[INFO] --- spring-boot:4.1.1:repackage (repackage) @ demo ---
[INFO] Replacing main artifact /bt/l4-pom/demo/target/demo-0.0.1-SNAPSHOT.jar with repackaged archive, adding nested dependencies in BOOT-INF/.
[INFO] BUILD SUCCESS
 

2clean package、install、-DskipTests で何が増え、何が減るか

は別の(clean)のフェーズなので、clean package と並べると clean:clean が先頭に1本増えます。install は package の後に が加わり、の com/example/demo/ に .pom と を置きます。 を付けても surefire:test の行は出ます。ゴールは呼ばれ、その中でテストを飛ばしているからです。

$ mvn clean package / mvn install / mvn -DskipTests package(抜粋)コマンド出力
$ mvn clean package
[INFO] --- clean:3.5.0:clean (default-clean) @ demo ---
[INFO] Deleting /bt/l4-pom/demo/target
[INFO] --- resources:3.5.0:resources (default-resources) @ demo ---
...
[INFO] --- spring-boot:4.1.1:repackage (repackage) @ demo ---
[INFO] BUILD SUCCESS
 
$ mvn install
[INFO] --- resources:3.5.0:resources (default-resources) @ demo ---
...
[INFO] --- spring-boot:4.1.1:repackage (repackage) @ demo ---
[INFO] --- install:3.1.4:install (default-install) @ demo ---
[INFO] Installing /bt/l4-pom/demo/pom.xml to /root/.m2/repository/com/example/demo/0.0.1-SNAPSHOT/demo-0.0.1-SNAPSHOT.pom
[INFO] Installing /bt/l4-pom/demo/target/demo-0.0.1-SNAPSHOT.jar to /root/.m2/repository/com/example/demo/0.0.1-SNAPSHOT/demo-0.0.1-SNAPSHOT.jar
[INFO] BUILD SUCCESS
 
$ mvn -DskipTests package
[INFO] --- resources:3.5.0:resources (default-resources) @ demo ---
[INFO] --- compiler:3.15.0:compile (default-compile) @ demo ---
[INFO] --- resources:3.5.0:testResources (default-testResources) @ demo ---
[INFO] --- compiler:3.15.0:testCompile (default-testCompile) @ demo ---
[INFO] --- surefire:3.5.6:test (default-test) @ demo ---
[INFO] --- jar:3.5.1:jar (default-jar) @ demo ---
[INFO] --- spring-boot:4.1.1:repackage (repackage) @ demo ---
[INFO] BUILD SUCCESS
 
$ mvn clean validate
[INFO] --- clean:3.5.0:clean (default-clean) @ demo ---
[INFO] BUILD SUCCESS
# validate にはゴールが割り当てられていないので、clean:clean だけで終わる
 

3help:describe -Dcmd=package: フェーズとゴールの対応表

のプロジェクトで、23のフェーズのどこに何が割り当てられているかを 自身に答えさせた出力です。Not defined のフェーズでは何も起きません。ただし表示される版(resources 3.4.0、surefire 3.5.4、jar 3.5.0)は Maven 3.9.16 に組み込みの既定で、実際のビルドで走ったのは が決めた 3.5.0、3.5.6、3.5.1 でした。Boot が足した もこの表には出ません。

$ mvn help:describe -Dcmd=packageコマンド出力
$ mvn help:describe -Dcmd=package
[INFO] 'package' is a phase corresponding to this plugin:
org.apache.maven.plugins:maven-jar-plugin:3.5.0:jar
 
It is a part of the lifecycle for the POM packaging 'jar'. This lifecycle includes the following phases:
* validate: Not defined
* initialize: Not defined
* generate-sources: Not defined
* process-sources: Not defined
* generate-resources: Not defined
* process-resources: org.apache.maven.plugins:maven-resources-plugin:3.4.0:resources
* compile: org.apache.maven.plugins:maven-compiler-plugin:3.15.0:compile
* process-classes: Not defined
* generate-test-sources: Not defined
* process-test-sources: Not defined
* generate-test-resources: Not defined
* process-test-resources: org.apache.maven.plugins:maven-resources-plugin:3.4.0:testResources
* test-compile: org.apache.maven.plugins:maven-compiler-plugin:3.15.0:testCompile
* process-test-classes: Not defined
* test: org.apache.maven.plugins:maven-surefire-plugin:3.5.4:test
* prepare-package: Not defined
* package: org.apache.maven.plugins:maven-jar-plugin:3.5.0:jar
* pre-integration-test: Not defined
* integration-test: Not defined
* post-integration-test: Not defined
* verify: Not defined
* install: org.apache.maven.plugins:maven-install-plugin:3.1.4:install
* deploy: org.apache.maven.plugins:maven-deploy-plugin:3.1.4:deploy
 

4プラグインは何を持っているか: help:describe -Dplugin= と、JAR の実体

compiler プラグインは、公式の説明が挙げる compile・testCompile に help を加えた3つのゴールを持ち、spring-boot プラグインは repackage や run を含む11のゴールを持ちます。フェーズに割り当てられているのはそのうち一部で、残りは spring-boot:run のように直接呼びます。プラグインの実体は、依存と同じ規則でローカルリポジトリに置かれた です。

$ mvn help:describe -Dplugin=compiler / -Dplugin=org.springframework.boot:spring-boot-maven-plugin(抜粋)コマンド出力
$ mvn help:describe -Dplugin=compiler
[INFO] org.apache.maven.plugins:maven-compiler-plugin:3.15.0
Name: Apache Maven Compiler Plugin
Description: The Compiler Plugin is used to compile the sources of your
project.
...
Goal Prefix: compiler
This plugin has 3 goals:
compiler:compile
Description: Compiles application sources. By default uses the javac
compiler of the JDK used to execute Maven. ...
compiler:help
...
compiler:testCompile
Description: Compiles application test sources. ...
 
$ mvn help:describe -Dplugin=org.springframework.boot:spring-boot-maven-plugin
[INFO] org.springframework.boot:spring-boot-maven-plugin:4.1.1
Name: Spring Boot Maven Plugin
...
Goal Prefix: spring-boot
This plugin has 11 goals:
# 以下、各ゴールの Description は repackage 以外省略
spring-boot:build-image
spring-boot:build-image-no-fork
spring-boot:build-info
spring-boot:help
spring-boot:process-aot
spring-boot:process-test-aot
spring-boot:repackage
Description: Repackage existing JAR and WAR archives so that they can be
executed from the command line using {@literal java -jar}. With layout=NONE
can also be used simply to package a JAR with nested dependencies (and no
main class, so not executable).
spring-boot:run
spring-boot:start
spring-boot:stop
spring-boot:test-run
 
$ ls -l /root/.m2/repository/org/apache/maven/plugins/maven-compiler-plugin/3.15.0/
-rw-r--r-- 1 root root 83823 Jan 27 2026 maven-compiler-plugin-3.15.0.jar
-rw-r--r-- 1 root root 40 Oct 1 13:22 maven-compiler-plugin-3.15.0.jar.sha1
-rw-r--r-- 1 root root 9549 Jan 27 2026 maven-compiler-plugin-3.15.0.pom
-rw-r--r-- 1 root root 40 Oct 1 13:22 maven-compiler-plugin-3.15.0.pom.sha1
-rw-r--r-- 1 root root 224 Oct 1 13:22 _remote.repositories
$ find /root/.m2/repository/org/springframework/boot/spring-boot-maven-plugin -name "*.jar"
/root/.m2/repository/org/springframework/boot/spring-boot-maven-plugin/4.1.1/spring-boot-maven-plugin-4.1.1.jar
 

5うまくいかない場合と、ゴールの直接呼び出し: フェーズ名を間違える

存在しないフェーズ名を渡すと、Maven はエラー文の中で3つの書き方(フェーズ名、prefix:goal、:artifactId[:version]:goal)と、3つのライフサイクルの全30フェーズを列挙します。後半は、ゴールを直接呼んだ例です。短い compiler:compile と完全な座標は同じゴールを指し、どちらも (コマンドラインから直接呼んだ実行の名前)として1本だけ動きます。 も同じで、この3つではフェーズは1つも進みませんでした。ゴールによっては先にフェーズを走らせるものもあります( は test-compile を必ず実行する、と公式の説明にあります)。

$ mvn nosuchphase / mvn dependency:tree / mvn compiler:compileコマンド出力
$ mvn nosuchphase
[INFO] BUILD FAILURE
...
[ERROR] Unknown lifecycle phase "nosuchphase". You must specify a valid lifecycle phase or a goal in the format <plugin-prefix>:<goal> or <plugin-group-id>:<plugin-artifact-id>[:<plugin-version>]:<goal>. Available lifecycle phases are: pre-clean, clean, post-clean, validate, initialize, generate-sources, process-sources, generate-resources, process-resources, compile, process-classes, generate-test-sources, process-test-sources, generate-test-resources, process-test-resources, test-compile, process-test-classes, test, prepare-package, package, pre-integration-test, integration-test, post-integration-test, verify, install, deploy, pre-site, site, post-site, site-deploy. -> [Help 1]
 
$ mvn dependency:tree
[INFO] --- dependency:3.10.0:tree (default-cli) @ demo ---
[INFO] BUILD SUCCESS
[INFO] Total time: 0.461 s
 
$ mvn compiler:compile
[INFO] --- compiler:3.15.0:compile (default-cli) @ demo ---
[INFO] BUILD SUCCESS
 
$ mvn org.apache.maven.plugins:maven-compiler-plugin:3.15.0:compile
[INFO] --- compiler:3.15.0:compile (default-cli) @ demo ---
[INFO] BUILD SUCCESS
 

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