Maven「release version 25 not supported」の原因と直し方
release version 25 not supported は、JDK を 25 以上にするか release を下げれば直る。
Maven を動かしている JDK が、pom.xml に書いた Java のバージョンより古いと出る。
公開:
要約
mvn compile がコンパイルの段階で止まる。
Maven 3.10.0・maven-compiler-plugin 3.16.0・JDK 21 の組み合わせで、pom.xml に Java 25 を指定すると次のように出る。
[INFO] Compiling 1 source file with javac [debug release 25] to target/classes
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.16.0:compile (default-compile) on project demo: Fatal error compiling: error: release version 25 not supported -> [Help 1]release version 25 not supported は、javac が --release 25 を受け付けなかったというエラーだ。pom.xml の maven.compiler.release は javac の --release に渡される。
そして --release に指定できるのは、使っている JDK 自身のバージョンと、それより前の限られたバージョンだけである(Setting the --release of the Java Compiler(新しいタブで開く))。
JDK 21 の javac は、Java 25 向けのコンパイルができない。
数字は pom.xml に書いた値がそのまま出るので、17 や 21 でも原因は同じだ。
解決策
1. Maven が使っている JDK を確かめる
mvn -vApache Maven 3.10.0 (c43a36b8d67be7e0805a411bc0898af1a51f5472)
Maven home: /usr/share/maven
Java version: 21.0.12.1, vendor: Eclipse Adoptium, runtime: /opt/java/openjdkJava version が Maven の使う JDK だ。release の値より古ければ、2 か 3 で直す。
2. 新しい JDK で Maven を動かす
JDK 25 以上を入れ、JAVA_HOME をそこへ向ける。
切り替わったかは mvn -v で見る。
export JAVA_HOME=/path/to/jdk-25
mvn -v
mvn compileGitHub Actions では、setup-java の java-version を pom.xml に合わせる。
- uses: actions/setup-java@v6
with:
distribution: temurin
java-version: '25'3. release を手元の JDK に合わせて下げる
Java 25 の言語機能や API を使っていないなら、release を手元の JDK 以下にする。
<properties>
<maven.compiler.release>21</maven.compiler.release>
</properties>古い source / target と違い、--release は指定したバージョンに無い標準 API の使用もコンパイル時に弾く。
4. Maven と別の JDK でコンパイルする
Maven は今の JDK で動かしたまま、コンパイルだけ別の JDK で行うなら Toolchains を使う(Guide to Using Toolchains(新しいタブで開く))。
よくある原因
- JDK が古い。
pom.xmlには 25 と書いたのに、Maven を動かしている JDK が 21 のままになっている。
特に設定しなければ、Maven は自分を動かしている JDK の javac でコンパイルする。 JAVA_HOMEが古い JDK を指している。mvnの起動スクリプトは、JAVA_HOMEが設定されていればその JDK のjavaで Maven を動かす。
新しい JDK を入れてjava -versionが新しくなっても、JAVA_HOMEが古いままなら Maven は古い JDK で動く。- CI の JDK が古い。
CI だけ落ちるなら、actions/setup-javaのjava-versionなどがpom.xmlの指定より古い。 source/targetで書いている。maven.compiler.releaseではなくmaven.compiler.sourceとmaven.compiler.targetに 25 を書いた場合、同じ食い違いはerror: invalid target release: 25として出る。