Skip to content

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のバージョンがそれに対応していない場合に発生します。

根本原因

このエラーが発生する主な原因は以下のいずれかです:

  1. JDKのバージョン不一致: プロジェクトがJava 17を要求しているが、システムのデフォルトJDKがそれより古いバージョン
  2. 環境変数の設定問題: JAVA_HOME が正しく設定されていない
  3. プロジェクト設定の問題: pom.xml のJavaバージョン設定が実際の環境と一致していない

解決方法

方法1: 使用するJDKバージョンの確認と切り替え

まず、現在のJava環境を確認します:

bash
java -version
javac -version
mvn -version
echo $JAVA_HOME

Mavenが使用するJavaバージョンを変更するには:

Unix/Linux/macOS:

bash
export JAVA_HOME=/path/to/your/jdk17/home
mvn spring-boot:run

Windows:

cmd
set JAVA_HOME=C:\path\to\your\jdk17\home
mvn spring-boot:run

一時的にのみJDK 17を使用する場合(全システムの設定を変更したくない場合):

bash
JAVA_HOME=~/path/to/jdk17/home mvn spring-boot:run

方法2: pom.xmlのJavaバージョン設定を確認

プロジェクトで使用するJavaバージョンが pom.xml で正しく設定されているか確認します:

xml
<properties>
    <java.version>17</java.version>
    <!-- または -->
    <maven.compiler.source>17</maven.compiler.source>
    <maven.compiler.target>17</maven.compiler.target>
</properties>

環境に合わせてバージョンを調整する必要がある場合は、例えばJava 11を使用している場合:

xml
<properties>
    <java.version>11</java.version>
</properties>

方法3: Mavenコンパイラプラグインの明示的設定

pom.xml でコンパイラプラグインを明示的に設定します:

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:

  1. プロジェクトを右クリック → Properties → Java Build Path
  2. LibrariesタブでJREシステムライブラリを確認
  3. Java Compilerのコンパイラ準拠レベルを確認

IntelliJ:

  1. File → Project Structure → Project Settings → Project
  2. Project SDKとProject language levelを確認

VSCode:

  1. Settings → Java Configuration → Java Homeの設定を確認
  2. 場合によってはSpring Boot Extension Packのバージョンダウングレードが必要な場合もあります

方法5: Mavenキャッシュのクリーンアップ

一時的なファイルの問題が原因の場合、以下のコマンドでキャッシュをクリーンアップします:

bash
mvn clean
mvn clean eclipse:clean eclipse:eclipse  # Eclipseを使用している場合

その後、プロジェクトの再インポートやMavenの更新を行います。

トラブルシューティングのフローチャート

予防策

  1. プロジェクト開始時の環境確認: 新しいプロジェクトを開始する前に、使用するJavaバージョンと開発環境のバージョンを確認する
  2. 環境変数の管理: .bashrc.zshrc、または環境変数設定ファイルで JAVA_HOME を明示的に設定する
  3. Dockerの使用: 開発環境を統一するためにDockerコンテナを使用することを検討する
  4. SDKMANの活用: 複数のJDKバージョンを簡単に管理できるSDKMANのようなツールを使用する

まとめ

「invalid target release: 17」エラーは、主にJavaバージョンの不一致によって発生します。システムのJDKバージョン、環境変数設定、プロジェクト設定のいずれかが原因である可能性が高いです。この記事で紹介した方法を順に試してみることで、問題を解決できるはずです。

最新のSpring BootプロジェクトではJava 17以上の使用が推奨されていますので、可能であればJDK 17以上のインストールと使用をお勧めします。