- 技術 💻
Mavenコマンド一覧|pom.xml書き方とよく使うオプション
Mavenとは、pom.xml という設定ファイルをもとに、Javaのコンパイル・テスト・パッケージ作成・ライブラリ取得をまとめて行うビルドツールです。 操作はほぼ mvn フェーズ名 と mvn プラグイン:ゴール の2種類で、そこにオプション(-P や -DskipTests など)を組み合わせます。
この記事では、よく使うmvnコマンドとオプションの早見表、ライフサイクルの図、コメント付きでそのまま使えるpom.xmlテンプレート、scopeの判断表、settings.xml・ミラーの書き方、よくあるエラーの対処をまとめました。マルチモジュール構成を Maven 3.9.11 で実際に実行したログも載せています(検証環境はMaven Centralに接続できないため、プラグイン取得が必要なコマンドは未実行と明記しています)。最新版は Maven 3.9.16(2026年5月13日) で、Maven 4.0.0 は RC版(4.0.0-rc-7、2026年9月24日) の段階です。
mvnコマンド・オプション早見表
よく使うコマンド
| やりたいこと | コマンド |
|---|---|
| コンパイル | mvn compile |
| テスト実行 | mvn test |
| 1クラス/1メソッドだけテスト | mvn test -Dtest=TaskServiceTest / -Dtest=TaskServiceTest#create |
| jar/warを作る | mvn package |
| 作り直す(成果物を消して作成) | mvn clean package |
| ローカルリポジトリ(~/.m2)に入れる | mvn clean install |
| テストを飛ばしてjar作成 | mvn package -DskipTests |
| テストのコンパイルも飛ばす | mvn package -Dmaven.test.skip=true |
| 依存ツリーを見る | mvn dependency:tree |
| 特定ライブラリの依存経路 | mvn dependency:tree -Dincludes=グループID:アーティファクトID |
| 最終的なpomを確認 | mvn help:effective-pom |
| 有効なプロファイルを確認 | mvn help:active-profiles |
| プロパティの値を確認 | mvn help:evaluate -Dexpression=project.version -q -DforceStdout |
| 依存の新しい版を探す | mvn versions:display-dependency-updates |
| 新規プロジェクト作成 | mvn archetype:generate |
| Maven Wrapperを作る | mvn wrapper:wrapper |
| バージョン表示 | mvn -v |
よく使うオプション
| オプション | 意味 | 例 |
|---|---|---|
-P |
プロファイルを有効化(!で無効化) |
mvn package -P prod / -P dev,local / -P !dev |
-D |
プロパティを渡す | mvn test -Dapp.env=dev |
-pl |
対象モジュールを指定 | mvn package -pl web |
-am |
指定モジュールが依存するモジュールも一緒に | mvn package -pl web -am |
-amd |
指定モジュールに依存するモジュールも一緒に | mvn test -pl core -amd |
-o |
オフライン(ネットに取りに行かない) | mvn -o package |
-U |
SNAPSHOTや取得失敗の記録を更新して取り直す | mvn -U clean install |
-q |
出力を最小限に(エラーのみ) | mvn -q package |
-X |
デバッグ出力 | mvn -X package |
-e |
エラー時にスタックトレースを表示 | mvn -e package |
-T |
並列ビルド(スレッド数、1CはCPUコア数×1) |
mvn -T 1C install |
-B |
バッチモード(対話なし・色なし、CI向け) | mvn -B verify |
-f |
pomの場所を指定 | mvn -f sub/pom.xml test |
-s |
settings.xmlを指定 | mvn -s ci-settings.xml deploy |
-ntp |
ダウンロードの進捗表示を消す | mvn -B -ntp verify |
-rf |
途中のモジュールから再開 | mvn install -rf :web |
-fae |
エラーがあっても最後まで続ける | mvn -fae test |
-DskipTests は「テストのコンパイルはするが実行しない」、-Dmaven.test.skip=true は「テストのコンパイルも実行もしない」という違いがあります。テストコードがほかのモジュールから使われる構成では、-DskipTests を選ぶと安全です。
本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。
(記載例)出典:株式会社RJC「Mavenコマンド一覧|pom.xml書き方とよく使うオプション」
Mavenの最新版とMaven 4の状況
2026年10月時点で、安定版(GA)の最新は Maven 3.9.16 です。 公式のリリース履歴では、3.9系は Java 8 以上で動きます。Maven 4.0.0 はまだRC(リリース候補)で、Java 17以上が必要です。
| バージョン | リリース日 | 必要なJava | 状況 |
|---|---|---|---|
| 3.9.16 | 2026-05-13 | Java 8 | 最新の安定版 |
| 3.10.0-rc-1 | 2026-07-09 | Java 8 | RC |
| 4.0.0-rc-6 | 2026-08-04 | Java 17 | RC |
| 4.0.0-rc-7 | 2026-09-24 | Java 17 | 最新のRC |
| 3.9.11(本記事の検証環境) | 2025-07-12 | Java 8 | 安定版 |
日々のビルドは3.9系の最新を使い、Maven 4はRCで動作を試しておくのが、いまの無理のない進め方です。Maven 4では、POMのモデルバージョン 4.1.0(<modules> の代わりに <subprojects> など)や、ビルド用POMと公開用POMの分離が導入されます。3.9系向けの pom.xml(modelVersion 4.0.0)は、Maven 4でもそのまま読み込めます。
ライフサイクル・フェーズ・ゴールの関係
Mavenのコマンドは「フェーズ」を指定すると、そのフェーズまでのすべてのフェーズが順番に実行されます。 各フェーズには「プラグインのゴール(実際の処理)」が結び付いています。
flowchart LR
validate --> compile --> test --> package --> verify --> install --> deploy
compile -.- C["compiler:compile"]
test -.- T["surefire:test"]
package -.- J["jar:jar"]
install -.- I["install:install"]
deploy -.- D["deploy:deploy"]
| フェーズ | 主な処理(jarの場合の既定ゴール) | 結果 |
|---|---|---|
validate |
pomの検証(既定のゴールなし) | pomが正しいかだけ確認 |
compile |
resources:resources, compiler:compile |
target/classes |
test |
resources:testResources, compiler:testCompile, surefire:test |
テスト結果 target/surefire-reports |
package |
jar:jar |
target/*.jar |
verify |
結合テスト(failsafeなどを設定した場合) | 検証結果 |
install |
install:install |
~/.m2/repository に登録 |
deploy |
deploy:deploy |
共有リポジトリに公開 |
clean は別のライフサイクル(target を消す)なので、mvn clean package のように並べて書きます。
| 書き方 | 意味 |
|---|---|
mvn package |
フェーズ指定。validate〜packageまで全部動く |
mvn dependency:tree |
ゴール指定。そのゴールだけ動く |
mvn clean verify |
cleanライフサイクル → defaultライフサイクルのverifyまで |
mvn compile exec:java |
フェーズとゴールを組み合わせる |
実行ログで確かめる(Maven 3.9.11)
検証環境:Apache Maven 3.9.11 / OpenJDK 21.0.10 / Linux。Maven Central(外部リポジトリ)に接続できない環境のため、プラグインを必要としない validate フェーズと、リアクター(マルチモジュールの実行順)関連のオプションを実行しました。
使ったマルチモジュール構成
todo-parent/
├── pom.xml (親:packaging=pom)
├── core/pom.xml (todo-core)
└── web/pom.xml (todo-web:todo-coreに依存)
<!-- web/pom.xml -->
<project xmlns="http://maven.apache.org/POM/4.0.0">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.example</groupId>
<artifactId>todo-parent</artifactId>
<version>1.0.0-SNAPSHOT</version>
</parent>
<artifactId>todo-web</artifactId>
<dependencies>
<dependency>
<groupId>com.example</groupId>
<artifactId>todo-core</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
</project>
mvn -o validate(全モジュール)
$ mvn -o validate
[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Build Order:
[INFO]
[INFO] todo-parent [pom]
[INFO] todo-core [jar]
[INFO] todo-web [jar]
[INFO]
[INFO] ----------------------< com.example:todo-parent >-----------------------
[INFO] Building todo-parent 1.0.0-SNAPSHOT [1/3]
[INFO] from pom.xml
[INFO] --------------------------------[ pom ]---------------------------------
[INFO]
[INFO] -----------------------< com.example:todo-core >------------------------
[INFO] Building todo-core 1.0.0-SNAPSHOT [2/3]
[INFO] from core/pom.xml
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] ------------------------< com.example:todo-web >------------------------
[INFO] Building todo-web 1.0.0-SNAPSHOT [3/3]
[INFO] from web/pom.xml
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary for todo-parent 1.0.0-SNAPSHOT:
[INFO]
[INFO] todo-parent ........................................ SUCCESS [ 0.002 s]
[INFO] todo-core .......................................... SUCCESS [ 0.001 s]
[INFO] todo-web ........................................... SUCCESS [ 0.000 s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
「Reactor Build Order」は、依存関係から自動で決まったビルド順です。 web が core に依存しているので、core が先になっています。
-pl と -am / -amd の違い
$ mvn -o validate -pl web
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------< com.example:todo-web >------------------------
[INFO] Building todo-web 1.0.0-SNAPSHOT
[INFO] from pom.xml
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] BUILD SUCCESS
$ mvn -o validate -pl web -am
[INFO] Reactor Build Order:
[INFO]
[INFO] todo-parent [pom]
[INFO] todo-core [jar]
[INFO] todo-web [jar]
...
[INFO] BUILD SUCCESS
$ mvn -o validate -pl core -amd
[INFO] Reactor Build Order:
[INFO] todo-core [jar]
[INFO] todo-web [jar]
...
[INFO] BUILD SUCCESS
| 指定 | 対象になったモジュール | 使う場面 |
|---|---|---|
-pl web |
web だけ | web だけ直した、coreは install 済み |
-pl web -am |
parent・core・web | web に必要なものを全部まとめてビルド |
-pl core -amd |
core・web | core を直したので、影響を受ける側もテスト |
-pl web だけだと、core の最新の変更は使われません(~/.m2 にある core が使われます)。core も直したときは -am を付けます。
-P で存在しないプロファイルを指定した場合
$ mvn -o validate -P dev,nosuch
[INFO] Scanning for projects...
[WARNING] The requested profile "nosuch" could not be activated because it does not exist.
...
[INFO] BUILD SUCCESS
...
[WARNING] The requested profile "nosuch" could not be activated because it does not exist.
プロファイル名の打ち間違いはエラーではなく警告で、ビルドは成功します。 本番用の設定が入らないままjarができる、ということが起こりうるので、ログの WARNING を確認する習慣をつけると安心です。
-q と -T
$ mvn -o -q validate
(何も表示されずに終了。エラーがないときは出力なし)
$ mvn -o validate -T 2 | grep -iE 'thread|Total'
[INFO] Using the MultiThreadedBuilder implementation with a thread count of 2
[INFO] Total time: 0.148 s (Wall Clock)
-X で読み込まれるsettings.xmlを確認
$ mvn -o -X validate | grep -iE 'maven home|settings'
Maven home: /opt/maven
[DEBUG] Reading global settings from /opt/maven/conf/settings.xml
[DEBUG] Reading user settings from /root/.m2/settings.xml
ミラーやプロキシの設定が効かないときは、-X でどのsettings.xmlが読まれているかを最初に確認すると原因を絞り込めます。
この環境で未実行のコマンド
次のコマンドはプラグインのダウンロードが必要なため、検証環境では実行していません(実行すると後述の「プラグインが見つからない」エラーになります)。書き方は公式ドキュメントに沿っています。
| 未実行 | 理由 |
|---|---|
mvn compile / test / package / install |
resources・compiler・surefire・jar プラグインが必要 |
mvn dependency:tree |
dependency プラグインが必要 |
mvn help:effective-pom / help:active-profiles |
help プラグインが必要 |
mvn wrapper:wrapper / archetype:generate |
各プラグインが必要 |
コピペ用pom.xmlテンプレート(コメント付き)
単一モジュールのJava 21アプリの基本形です。 バージョン番号は例なので、使うときはMaven Centralで最新を確認してください(このテンプレートはプラグイン取得が必要なため未実行です)。
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<!-- ① 座標(GAV):世界で一意になる名前 -->
<groupId>com.example</groupId>
<artifactId>todo-app</artifactId>
<version>1.0.0-SNAPSHOT</version>
<packaging>jar</packaging>
<!-- ② プロパティ:版や文字コードを1か所で管理 -->
<properties>
<maven.compiler.release>21</maven.compiler.release>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<junit.version>5.13.4</junit.version>
</properties>
<!-- ③ dependencyManagement:版だけを決める(ここでは追加されない) -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.junit</groupId>
<artifactId>junit-bom</artifactId>
<version>${junit.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<!-- ④ dependencies:実際に使うライブラリ -->
<dependencies>
<!-- BOMで版が決まっているので version は書かない -->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<!-- ⑤ build:プラグインの版と設定 -->
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.14.1</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.5.4</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.4.2</version>
<configuration>
<archive>
<manifest>
<mainClass>com.example.todo.Main</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
</plugins>
</build>
<!-- ⑥ profiles:環境ごとの切り替え(mvn -P prod) -->
<profiles>
<profile>
<id>dev</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<app.env>dev</app.env>
</properties>
</profile>
<profile>
<id>prod</id>
<properties>
<app.env>prod</app.env>
</properties>
</profile>
</profiles>
</project>
pom.xmlの要素早見表
| 要素 | 役割 | ポイント |
|---|---|---|
groupId / artifactId / version |
成果物の名前(GAV) | -SNAPSHOT は開発中の版 |
packaging |
成果物の種類 | jar(既定)/ war / pom(親) |
parent |
親pomの設定を引き継ぐ | Spring Bootの spring-boot-starter-parent もこれ |
modules |
子モジュールの一覧 | 親pomに書く(Maven 4では subprojects) |
properties |
変数 | ${junit.version} で参照、-D で上書き可 |
dependencyManagement |
版の一元管理 | ここに書いただけでは依存に入らない |
dependencies |
使うライブラリ | 版は dependencyManagement に任せられる |
build/plugins |
プラグインの版・設定 | 版を書いておくとビルドが安定する |
build/pluginManagement |
プラグインの版の一元管理 | 子モジュール向け |
profiles |
条件付きの設定 | -P / activation で有効化 |
repositories |
取得先の追加 | 社内リポジトリは settings.xml のミラーで書くのが一般的 |
maven.compiler.release は、source と target を両方指定するより確実です。指定したJavaの版にないAPIを使うとコンパイルエラーで教えてくれます。
scope一覧と判断表
| scope | コンパイル | テスト | 実行時(jarに同梱) | 例 |
|---|---|---|---|---|
compile(既定) |
使える | 使える | 含む | 一般的なライブラリ |
provided |
使える | 使える | 含まない | サーブレットAPI、Lombok |
runtime |
使えない | 使える | 含む | JDBCドライバ |
test |
使えない | 使える | 含まない | JUnit、AssertJ、Mockito |
system |
使える | 使える | 含まない | ローカルのjarを直接指す(現在は非推奨) |
import |
― | ― | ― | dependencyManagement でBOMを読み込む専用 |
| 質問 | はい | いいえ |
|---|---|---|
| ① テストでしか使わない? | test |
②へ |
| ② ソースで import する? | ③へ | runtime |
| ③ 実行環境(サーバーなど)が用意してくれる? | provided |
compile(省略可) |
Gradleの implementation は Maven の compile、compileOnly は provided、runtimeOnly は runtime、testImplementation は test にほぼ対応します。
依存の版がぶつかったとき
Mavenは、同じライブラリの版が複数出てきたとき、依存ツリーで「近い」ほうを使います(同じ深さなら先に書いたほう)。意図しない版になったときは、次のどちらかで直します。
<!-- 方法1:dependencyManagement で版を固定(おすすめ) -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.example.lib</groupId>
<artifactId>json-util</artifactId>
<version>2.1.0</version>
</dependency>
</dependencies>
</dependencyManagement>
<!-- 方法2:exclusions で推移的依存を外す -->
<dependency>
<groupId>com.example.lib</groupId>
<artifactId>report-lib</artifactId>
<version>1.4.0</version>
<exclusions>
<exclusion>
<groupId>com.example.lib</groupId>
<artifactId>json-util</artifactId>
</exclusion>
</exclusions>
</dependency>
確認は mvn dependency:tree -Dverbose で行います(omitted for conflict と表示された依存が、版の衝突で外れたものです)。
settings.xmlとミラーの書き方
settings.xmlは「PCごと・ユーザーごと」の設定で、pom.xmlは「プロジェクトごと」の設定です。 パスワードやプロキシはpomではなくsettings.xmlに書きます。
| ファイル | 場所 | 優先度 |
|---|---|---|
| ユーザー設定 | ~/.m2/settings.xml |
高い |
| 全体設定 | ${maven.home}/conf/settings.xml |
低い |
| 明示指定 | mvn -s パス |
ユーザー設定の代わりに使う |
<!-- ~/.m2/settings.xml -->
<settings xmlns="http://maven.apache.org/SETTINGS/1.2.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.2.0 https://maven.apache.org/xsd/settings-1.2.0.xsd">
<!-- ローカルリポジトリの場所を変える(省略時は ~/.m2/repository) -->
<!-- <localRepository>/data/m2repo</localRepository> -->
<!-- ミラー:すべての取得を社内リポジトリ経由にする -->
<mirrors>
<mirror>
<id>internal-repo</id>
<name>社内ミラー</name>
<url>https://repo.example.internal/maven-public/</url>
<mirrorOf>*</mirrorOf>
</mirror>
</mirrors>
<!-- 認証情報:id をミラーやリポジトリの id とそろえる -->
<servers>
<server>
<id>internal-repo</id>
<username>${env.REPO_USER}</username>
<password>${env.REPO_PASSWORD}</password>
</server>
</servers>
<!-- プロキシ -->
<proxies>
<proxy>
<id>office-proxy</id>
<active>true</active>
<protocol>https</protocol>
<host>proxy.example.internal</host>
<port>8080</port>
<nonProxyHosts>localhost|*.example.internal</nonProxyHosts>
</proxy>
</proxies>
</settings>
mirrorOf の値 |
意味 |
|---|---|
* |
すべてのリポジトリ |
central |
Maven Central だけ |
*,!snapshots |
snapshots という id 以外すべて |
external:* |
localhost とファイル以外のすべて |
パスワードは ${env.変数名} で環境変数から読むと、ファイルに直接書かずに済みます。 暗号化したい場合は mvn --encrypt-master-password / --encrypt-password も使えます。
よくあるエラーと対処(実際のエラー文つき)
1. Plugin ... could not be resolved(プラグインが取得できない)
検証環境で mvn -o compile を実行したときのエラーです(実行結果)。
[WARNING] The POM for org.apache.maven.plugins:maven-resources-plugin:jar:3.3.1 is missing, no dependency information available
[INFO] BUILD FAILURE
[ERROR] Plugin org.apache.maven.plugins:maven-resources-plugin:3.3.1 or one of its dependencies could not be resolved:
[ERROR] Cannot access central (https://repo.maven.apache.org/maven2) in offline mode and the artifact org.apache.maven.plugins:maven-resources-plugin:jar:3.3.1 has not been downloaded from it before.
-o を外すと、今度は通信先から 403 が返りました(実行結果)。
[ERROR] Plugin org.apache.maven.plugins:maven-resources-plugin:3.3.1 or one of its dependencies could not be resolved:
[ERROR] The following artifacts could not be resolved: org.apache.maven.plugins:maven-resources-plugin:pom:3.3.1 (absent): Could not transfer artifact org.apache.maven.plugins:maven-resources-plugin:pom:3.3.1 from/to central (https://repo.maven.apache.org/maven2): status code: 403, reason phrase: Forbidden (403)
→ オフラインなら一度ネットにつないで取得、403や接続エラーならsettings.xmlのプロキシ・ミラーを確認します。 依存ライブラリで同じことが起きると Could not resolve dependencies for project ... というメッセージになり、対処は同じです。一度失敗した記録が残っているときは mvn -U で取り直します。
2. No plugin found for prefix 'help'
mvn -o help:effective-pom の結果です(実行結果)。
[ERROR] No plugin found for prefix 'help' in the current project and in the plugin groups [org.apache.maven.plugins, org.codehaus.mojo] available from the repositories [local (/root/.m2/repository), central (https://repo.maven.apache.org/maven2)] -> [Help 1]
→ プラグインがまだ取得されていないか、接頭辞(prefix)の打ち間違いです。 取得できない環境では mvn org.apache.maven.plugins:maven-help-plugin:3.5.1:effective-pom のように正式名で指定すると、どのプラグインが必要かがはっきりします。
3. 'dependencies.dependency.version' ... is missing
versionを書き忘れ、scopeも打ち間違えたときの結果です(実行結果)。
[ERROR] 'dependencies.dependency.version' for com.example:todo-core:jar is missing. @ line 11, column 17
[WARNING] 'dependencies.dependency.scope' for com.example:todo-core:jar must be one of [provided, compile, runtime, test, system] but is 'tset'. @ line 14, column 14
→ versionを書くか、dependencyManagement(BOM)で版を管理します。 scopeの誤りは警告止まりなので、見落とさないようにします。
4. Child module ... does not exist
親pomの <modules> に、存在しないフォルダを書いたときの結果です(実行結果)。
[ERROR] Child module /…/todo-parent/api of /…/todo-parent/pom.xml does not exist @
[ERROR] The build could not read 1 project -> [Help 1]
→ <module> にはartifactIdではなく「フォルダ名」を書きます。 フォルダ名とartifactIdが違う構成でよく起こります。
そのほかのよくあるエラー
| エラー文(要旨) | 原因 | 対処 |
|---|---|---|
release version 21 not supported |
Mavenを動かすJDKが古い | JAVA_HOME を21以上に、mvn -v で確認 |
No tests to run / テストが0件 |
surefireが古い、クラス名が *Test でない |
surefireの版を上げる、命名を合わせる |
Non-resolvable parent POM |
親pomが見つからない | relativePath を確認、親を先に install |
PKIX path building failed |
社内プロキシの証明書が信頼されていない | JDKのトラストストアに証明書を追加 |
Failed to execute goal ... surefire ... There are test failures |
テスト失敗 | target/surefire-reports を確認 |
class file has wrong version 65.0, should be 61.0 |
依存がより新しいJava向け | maven.compiler.release とJDKをそろえる |
よくある質問
Q. mvn installとmvn packageの違いは何ですか?
A. package は target にjarを作るところまで、install はさらにそのjarを ~/.m2/repository に登録します。マルチモジュールで、別のモジュールから -pl で単独ビルドするときに install 済みのものが使われます。
Q. -DskipTestsと-Dmaven.test.skip=trueはどちらを使えばよいですか?
A. ふだんは -DskipTests がおすすめです。テストコードのコンパイルはするので、テストコードの書き間違いに気づけます。-Dmaven.test.skip=true はテストのコンパイルも飛ばすため、テスト用jarを使うモジュールがあるとビルドが通らなくなることがあります。
Q. pom.xmlとsettings.xmlの使い分けは? A. チーム全員で同じにしたいもの(依存、プラグイン、プロファイル)はpom.xml、PCや人によって変わるもの(ミラー、プロキシ、パスワード)はsettings.xmlに書きます。
Q. Maven 4にはもう移行すべきですか? A. 2026年10月時点では4.0.0はRC段階のため、通常のビルドは3.9系の最新(3.9.16)で行い、Maven 4は手元で試して動作を確認しておくと移行がスムーズです。3.9系向けのpom.xmlはMaven 4でも読み込めます。
まとめ
- mvnは「フェーズ」(compile・test・package・install)と「ゴール」(dependency:tree など)の2種類で操作する
- フェーズは前のフェーズも全部実行する。
cleanは別のライフサイクルなので並べて書く - マルチモジュールは
-plで対象を絞り、-am/-amdで関連モジュールも含める(実行ログで順序を確認) - 版は
propertiesとdependencyManagement(BOM)で一元管理、scopeは判断表で選ぶ - ミラー・プロキシ・パスワードはsettings.xml、効かないときは
-Xで読み込み先を確認 - 最新の安定版は3.9.16、Maven 4.0.0はRC(rc-7)の段階
本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。
(記載例)出典:株式会社RJC「Mavenコマンド一覧|pom.xml書き方とよく使うオプション」
株式会社RJCでは、MavenなどJavaのビルドツールの使い方を仲間と学び合っています。こうした知識を共有しながら、日々技術を磨いています。
株式会社RJC ― SI事業・SES事業・AI駆動開発。RJCは一緒に成長を楽しめる会社です。
WE ARE HIRING
RJCで一緒に開発しながら、
成長を楽しみませんか?
RJCは、Web・モバイル・AIを活用した開発プロジェクトで、テックリードやPM・PMOも活躍するシステム開発会社です。会社を知る、待遇を確かめる、話を聞いてみる。気になるところ見てみてください!
- 127日年間休日
- 12時間平均残業時間
- 毎日ガチャ遊びココロも大切にする福利厚生。アマギフなどの賞品ラインナップ!
ほかにも、チケットレストラン、書籍読み放題、2年ごとの慰労報奨(休暇 or 金一封)、11期連続の黒字決算。