Skip to content

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を使用している可能性があります。

根本原因

この問題の主な原因は以下のいずれかです:

  1. 環境変数JAVA_HOMEの設定ミス
  2. Maven設定ファイルでのJDKパスの直接指定
  3. IDEの実行設定でのJRE選択ミス
  4. Maven Compiler Pluginの設定不足

解決方法

方法1: 環境変数の確認と設定

まず、システムの環境変数が正しく設定されていることを確認します:

bash
# 現在のJavaバージョンを確認
java -version

# JAVA_HOME環境変数を確認
echo %JAVA_HOME%  # Windows
echo $JAVA_HOME   # Linux/Mac

JAVA_HOMEがJDK 11を指していることを確認してください:

bash
set JAVA_HOME=C:\Program Files\Java\jdk-11.0.8
bash
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パスが直接指定されている場合があります。ファイルを開き、先頭付近に以下のような行がないか確認します:

bat
set JAVA_HOME=C:\path\to\jdk8

このような行があれば、JDK 11のパスに修正するか、コメントアウトします。

方法3: Maven Compiler Pluginの設定

pom.xmlでMaven Compiler Pluginを明示的に設定します:

xml
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.11.0</version>
    <configuration>
        <release>11</release>
    </configuration>
</plugin>
xml
<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のプロパティ設定が正しいことを確認します:

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の場合

  1. File > Project Structure > Project Settings > Project
  2. Project SDKとProject language levelがJDK 11に設定されていることを確認
  3. File > Settings > Build, Execution, Deployment > Build Tools > Maven > Runner
  4. JREがJDK 11に設定されていることを確認

Eclipseの場合

  1. Run > Run Configurations...
  2. Maven Build設定を選択
  3. JREタブでJDK 11を選択

方法6: SDKMANを使用したJDK管理(Linux/Mac)

SDKMANを使用すると、複数のJDKバージョンを簡単に管理できます:

bash
# 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

トラブルシューティング

問題が解決しない場合は、以下の確認を行ってください:

  1. Mavenのバージョン情報を確認

    bash
    mvn -v

    出力に表示されるJavaバージョンが11であることを確認します。

  2. 異なるJDKベンダーの試用: AdoptOpenJDKからCorrettoや他のベンダーに変更すると問題が解決することがあります。

  3. Mavenキャッシュのクリア

    bash
    mvn clean
  4. 詳細エラーの確認

    bash
    mvn compile -e -X

まとめ

「invalid target release: 11」エラーは、Mavenが正しいJDKバージョンを使用していない場合に発生します。環境変数JAVA_HOMEの確認、Maven設定ファイルの確認、IDE設定の確認、そしてMaven Compiler Pluginの明示的な設定を行うことで、ほとんどの場合で問題を解決できます。

複数のJDKバージョンを管理する必要がある場合は、SDKMANなどのツールを使用すると効率的にバージョン切り替えが可能です。