Mavenでの「invalid target release: 11」エラーの解決方法
問題の概要
Java 11を使用してMavenプロジェクトをコンパイルしようとすると、以下のエラーが発生することがあります:
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.0:compile (default-compile) on project demo: Fatal error compiling: invalid target release: 11
このエラーは、MavenがJava 11ではなく古いバージョンのJava(多くの場合Java 8)を使用している場合に発生します。java -version
コマンドでは正しいバージョンが表示されていても、Mavenが別のJDKを使用している可能性があります。
根本原因
この問題の主な原因は以下のいずれかです:
- 環境変数
JAVA_HOME
の設定ミス - Maven設定ファイルでのJDKパスの直接指定
- IDEの実行設定でのJRE選択ミス
- Maven Compiler Pluginの設定不足
解決方法
方法1: 環境変数の確認と設定
まず、システムの環境変数が正しく設定されていることを確認します:
# 現在のJavaバージョンを確認
java -version
# JAVA_HOME環境変数を確認
echo %JAVA_HOME% # Windows
echo $JAVA_HOME # Linux/Mac
JAVA_HOME
がJDK 11を指していることを確認してください:
set JAVA_HOME=C:\Program Files\Java\jdk-11.0.8
export JAVA_HOME=/path/to/jdk-11.0.8
PATH環境変数にも%JAVA_HOME%\bin
(Windows)または$JAVA_HOME/bin
(Linux/Mac)が含まれていることを確認します。
方法2: Maven設定ファイルの修正
Mavenの設定ファイル(mvn.bat
またはmvn.cmd
)でJDKパスが直接指定されている場合があります。ファイルを開き、先頭付近に以下のような行がないか確認します:
set JAVA_HOME=C:\path\to\jdk8
このような行があれば、JDK 11のパスに修正するか、コメントアウトします。
方法3: Maven Compiler Pluginの設定
pom.xml
でMaven Compiler Pluginを明示的に設定します:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.11.0</version>
<configuration>
<release>11</release>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.11.0</version>
<configuration>
<source>11</source>
<target>11</target>
</configuration>
</plugin>
TIP
<release>
オプションを使用すると、言語バージョンとAPIバージョンの両方を設定できるため、より安全で推奨されます。
方法4: プロパティ設定の確認
pom.xml
のプロパティ設定が正しいことを確認します:
<properties>
<java.version>11</java.version>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
</properties>
方法5: IDE設定の確認
IntelliJ IDEAやEclipseなどのIDEを使用している場合、プロジェクト設定と実行設定の両方を確認する必要があります。
IntelliJ IDEAの場合:
- File > Project Structure > Project Settings > Project
- Project SDKとProject language levelがJDK 11に設定されていることを確認
- File > Settings > Build, Execution, Deployment > Build Tools > Maven > Runner
- JREがJDK 11に設定されていることを確認
Eclipseの場合:
- Run > Run Configurations...
- Maven Build設定を選択
- JREタブでJDK 11を選択
方法6: SDKMANを使用したJDK管理(Linux/Mac)
SDKMANを使用すると、複数のJDKバージョンを簡単に管理できます:
# SDKMANのインストール
curl -s "https://get.sdkman.io" | bash
source "$HOME/.sdkman/bin/sdkman-init.sh"
# 利用可能なJDKリストを表示
sdk list java
# JDK 11のインストール
sdk install java 11.0.11.hs-adpt
# デフォルトJDKの設定
sdk default java 11.0.11.hs-adpt
# プロジェクト固有の設定
echo "java=11.0.11.hs-adpt" > .sdkmanrc
sdk env
トラブルシューティング
問題が解決しない場合は、以下の確認を行ってください:
Mavenのバージョン情報を確認:
bashmvn -v
出力に表示されるJavaバージョンが11であることを確認します。
異なるJDKベンダーの試用: AdoptOpenJDKからCorrettoや他のベンダーに変更すると問題が解決することがあります。
Mavenキャッシュのクリア:
bashmvn clean
詳細エラーの確認:
bashmvn compile -e -X
まとめ
「invalid target release: 11」エラーは、Mavenが正しいJDKバージョンを使用していない場合に発生します。環境変数JAVA_HOME
の確認、Maven設定ファイルの確認、IDE設定の確認、そしてMaven Compiler Pluginの明示的な設定を行うことで、ほとんどの場合で問題を解決できます。
複数のJDKバージョンを管理する必要がある場合は、SDKMANなどのツールを使用すると効率的にバージョン切り替えが可能です。