Mavenでの「invalid target release: 17」エラー解決方法
問題の概要
Spring Bootプロジェクトで mvn spring-boot:run
を実行した際に発生するコンパイルエラーです。具体的なエラーメッセージは以下の通りです:
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.10.1:compile (default-compile) on project myproject: Fatal error compiling: invalid target release: 17
このエラーは、MavenがJava 17をターゲットとしてコンパイルしようとしたが、使用しているJDKのバージョンがそれに対応していない場合に発生します。
根本原因
このエラーが発生する主な原因は以下のいずれかです:
- JDKのバージョン不一致: プロジェクトがJava 17を要求しているが、システムのデフォルトJDKがそれより古いバージョン
- 環境変数の設定問題:
JAVA_HOME
が正しく設定されていない - プロジェクト設定の問題:
pom.xml
のJavaバージョン設定が実際の環境と一致していない
解決方法
方法1: 使用するJDKバージョンの確認と切り替え
まず、現在のJava環境を確認します:
java -version
javac -version
mvn -version
echo $JAVA_HOME
Mavenが使用するJavaバージョンを変更するには:
Unix/Linux/macOS:
export JAVA_HOME=/path/to/your/jdk17/home
mvn spring-boot:run
Windows:
set JAVA_HOME=C:\path\to\your\jdk17\home
mvn spring-boot:run
一時的にのみJDK 17を使用する場合(全システムの設定を変更したくない場合):
JAVA_HOME=~/path/to/jdk17/home mvn spring-boot:run
方法2: pom.xmlのJavaバージョン設定を確認
プロジェクトで使用するJavaバージョンが pom.xml
で正しく設定されているか確認します:
<properties>
<java.version>17</java.version>
<!-- または -->
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
</properties>
環境に合わせてバージョンを調整する必要がある場合は、例えばJava 11を使用している場合:
<properties>
<java.version>11</java.version>
</properties>
方法3: Mavenコンパイラプラグインの明示的設定
pom.xml
でコンパイラプラグインを明示的に設定します:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>17</source>
<target>17</target>
</configuration>
</plugin>
</plugins>
</build>
方法4: IDE設定の確認(Eclipse/IntelliJ/VSCode)
IDEを使用している場合
IDEの設定で使用されるJavaバージョンがコマンドラインと異なる場合があります。各IDEで以下の設定を確認してください:
Eclipse:
- プロジェクトを右クリック → Properties → Java Build Path
- LibrariesタブでJREシステムライブラリを確認
- Java Compilerのコンパイラ準拠レベルを確認
IntelliJ:
- File → Project Structure → Project Settings → Project
- Project SDKとProject language levelを確認
VSCode:
- Settings → Java Configuration → Java Homeの設定を確認
- 場合によってはSpring Boot Extension Packのバージョンダウングレードが必要な場合もあります
方法5: Mavenキャッシュのクリーンアップ
一時的なファイルの問題が原因の場合、以下のコマンドでキャッシュをクリーンアップします:
mvn clean
mvn clean eclipse:clean eclipse:eclipse # Eclipseを使用している場合
その後、プロジェクトの再インポートやMavenの更新を行います。
トラブルシューティングのフローチャート
予防策
- プロジェクト開始時の環境確認: 新しいプロジェクトを開始する前に、使用するJavaバージョンと開発環境のバージョンを確認する
- 環境変数の管理:
.bashrc
、.zshrc
、または環境変数設定ファイルでJAVA_HOME
を明示的に設定する - Dockerの使用: 開発環境を統一するためにDockerコンテナを使用することを検討する
- SDKMANの活用: 複数のJDKバージョンを簡単に管理できるSDKMANのようなツールを使用する
まとめ
「invalid target release: 17」エラーは、主にJavaバージョンの不一致によって発生します。システムのJDKバージョン、環境変数設定、プロジェクト設定のいずれかが原因である可能性が高いです。この記事で紹介した方法を順に試してみることで、問題を解決できるはずです。
最新のSpring BootプロジェクトではJava 17以上の使用が推奨されていますので、可能であればJDK 17以上のインストールと使用をお勧めします。