タイトル: エラー一覧
SEOタイトル: Maven よくあるエラー集と対処完全ガイド — 依存解決/プラグイン/JDK
| この記事の要点 |
|
Maven エラーの調査の基本
# まず -X (DEBUG) でフルログ
mvn clean install -X 2>&1 | tee build.log
# -e で例外スタックトレース
mvn clean install -e
# 依存ツリーを確認
mvn dependency:tree
mvn dependency:tree -Dverbose -Dincludes=com.fasterxml.jackson.core
# 有効な設定を表示
mvn help:effective-pom
mvn help:effective-settings
# プラグインのドキュメント
mvn help:describe -Dplugin=org.apache.maven.plugins:maven-compiler-plugin
1. Could not resolve dependencies
[ERROR] Failed to execute goal on project myapp:
Could not resolve dependencies for project com.example:myapp:jar:1.0.0:
Could not find artifact com.example:lib:jar:2.5.0 in central
(https://repo.maven.apache.org/maven2)
原因の切り分け:
| 原因 | 確認 | 対処 |
|---|---|---|
| バージョン誤り | Maven Central で確認 | 正しいバージョンに修正 |
| リポジトリ未設定 | 非 Central のライブラリ | pom.xml に <repositories> 追加 |
| プロキシ | 企業 NW | settings.xml に <proxies> |
| SNAPSHOT 鮮度不足 | 古いキャッシュ | -U 強制更新 |
| キャッシュ破損 | 不完全 DL | ~/.m2/repository 該当削除 |
| 認証必須 | Private repo | settings.xml に <servers> |
# 強制再取得
mvn clean install -U
# 該当 jar のキャッシュだけ削除
rm -rf ~/.m2/repository/com/example/lib/2.5.0
# ローカルリポジトリ場所
mvn help:evaluate -Dexpression=settings.localRepository
# 詳細ログで取得失敗箇所特定
mvn dependency:resolve -X | grep -i "downloading\|failed"
2. Failed to execute goal
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.11.0:compile
(default-compile) on project myapp:
Fatal error compiling: error: invalid target release: 17
JDK バージョン不一致が最頻出。動作中の Java と maven-compiler-plugin の target が合っていません。
# 現在の Java
mvn -version
# Java version: 11.0.18, vendor: Eclipse Adoptium
# JAVA_HOME 設定
export JAVA_HOME=/usr/lib/jvm/java-17-openjdk
mvn -version
# Windows
setx JAVA_HOME "C:\Program Files\Java\jdk-17"
# 複数バージョン管理 (Linux/macOS)
sdk install java 17.0.6-tem
sdk use java 17.0.6-tem<!-- pom.xml: 明示 -->
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<!-- または plugin で -->
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.13.0</version>
<configuration>
<source>17</source>
<target>17</target>
<release>17</release>
</configuration>
</plugin>
</plugins>
</build>
3. Plugin xxx not found
[ERROR] Plugin org.apache.maven.plugins:maven-surefire-plugin:3.2.5 or
one of its dependencies could not be resolved# プラグイン定義のバージョン誤り or プロキシ問題
mvn clean install -X | grep -i "downloading\|surefire"
# 強制再取得
mvn clean install -U
# プラグイン群を事前に取得
mvn dependency:go-offline
# オフラインビルド
mvn -o clean install
4. プロキシ設定 (~/.m2/settings.xml)
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0">
<proxies>
<proxy>
<id>company-proxy</id>
<active>true</active>
<protocol>http</protocol>
<host>proxy.example.com</host>
<port>8080</port>
<username>USER</username>
<password>PASS</password>
<nonProxyHosts>*.example.com|localhost|127.0.0.1</nonProxyHosts>
</proxy>
</proxies>
<servers>
<server>
<id>nexus-snapshots</id>
<username>deploy</username>
<password>secret</password>
</server>
</servers>
<mirrors>
<mirror>
<id>internal-nexus</id>
<name>Internal Nexus</name>
<url>https://nexus.example.com/repository/maven-public/</url>
<mirrorOf>*</mirrorOf>
</mirror>
</mirrors>
</settings>
5. SSL 証明書エラー
PKIX path building failed:
sun.security.provider.certpath.SunCertPathBuilderException:
unable to find valid certification path to requested target
社内 Nexus が自己署名 / 中間 CA 不足のケース:
# 証明書取得 (Nexus が https://nexus.example.com の場合)
openssl s_client -connect nexus.example.com:443 -showcerts < /dev/null \
> cert.txt 2>/dev/null
# Java keystore に追加
keytool -import -trustcacerts \
-alias nexus-example \
-file cert.crt \
-keystore "$JAVA_HOME/lib/security/cacerts" \
-storepass changeit -noprompt
# プロジェクト個別の truststore
mvn clean install -Djavax.net.ssl.trustStore=/path/to/cacerts
6. 依存衝突 (Convergence Error)
[WARNING] Found duplicate (but equal) classes in two different files:
com.fasterxml.jackson.databind:jackson-databind:2.14.0
com.fasterxml.jackson.databind:jackson-databind:2.13.0# 依存ツリーで衝突確認
mvn dependency:tree -Dverbose
# 出力例
# +- com.example:lib-a:jar:1.0
# | \- com.fasterxml.jackson.core:jackson-databind:jar:2.13.0
# \- com.example:lib-b:jar:2.0
# \- (com.fasterxml.jackson.core:jackson-databind:jar:2.14.0
# - omitted for conflict with 2.13.0)<!-- 解決: dependencyManagement で固定 -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.14.2</version>
</dependency>
</dependencies>
</dependencyManagement>
<!-- または個別に exclusion -->
<dependency>
<groupId>com.example</groupId>
<artifactId>lib-a</artifactId>
<version>1.0</version>
<exclusions>
<exclusion>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</exclusion>
</exclusions>
</dependency>
7. 文字コードエラー
[WARNING] File encoding has not been set, using platform encoding MS932,
i.e. build is platform dependent!<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
</properties>
8. Repository unreachable / connect timed out
# 接続確認
curl -I https://repo.maven.apache.org/maven2/
# DNS / プロキシ確認
nslookup repo.maven.apache.org
env | grep -i proxy
# Maven 個別タイムアウト設定 (settings.xml で wagon 設定)
mvn -Dmaven.wagon.http.connectionTimeout=60000 \
-Dmaven.wagon.http.readTimeout=60000 \
clean install
9. メモリ不足 (OutOfMemoryError)
# Maven 自体のメモリ
export MAVEN_OPTS="-Xmx2g -XX:MaxMetaspaceSize=512m"
# Surefire (テスト実行) のメモリ
mvn test -DargLine="-Xmx2g"
# Windows
set MAVEN_OPTS=-Xmx2g
10. mvn release / deploy エラー
[ERROR] Failed to deploy artifacts:
Could not transfer artifact com.example:myapp:jar:1.0.0
from/to nexus-snapshots (https://nexus.example.com/.../snapshots):
status code: 401, reason phrase: Unauthorized<!-- settings.xml で認証 -->
<servers>
<server>
<id>nexus-snapshots</id> <!-- ← pom.xml の distributionManagement と一致 -->
<username>deploy</username>
<password>${env.NEXUS_PASSWORD}</password>
</server>
</servers>
<!-- pom.xml -->
<distributionManagement>
<snapshotRepository>
<id>nexus-snapshots</id>
<url>https://nexus.example.com/repository/maven-snapshots/</url>
</snapshotRepository>
</distributionManagement>
緊急時のリセット
# 全キャッシュ削除(時間はかかるが確実)
rm -rf ~/.m2/repository
# 再ビルド
mvn clean install
# プラグインキャッシュも初期化
rm -rf ~/.m2/wrapper
rm -rf .mvn
# wrapper 再生成
mvn wrapper:wrapper
FAQ
Q: -X ログが多すぎて読めない
A: mvn -X 2>&1 | grep -i "downloading\|failed\|error" で絞る。または該当 goal を mvn dependency:resolve -X 等で個別実行。
Q: ローカルで動くが Jenkins で落ちる
A: ① JDK バージョン違い、② プロキシ設定の差、③ ~/.m2/settings.xml の差、④ プライベートリポジトリ認証情報の漏れ。
Q: Maven Wrapper (mvnw) を使うべき?
A: チームで Maven バージョンを揃えられるので推奨。./mvnw clean install が同じ Maven バージョンで動きます。