アイキャッチ

実装・エラー解決

mavenで「ターゲット・オプション1.5は現在サポートされていません。」に対処する

Mavenで「ソース・オプション5は現在サポートされていません」「ターゲット・オプション1.5は現在サポートされていません」と出たとき、実行JDKとコンパイル対象を確認します。

Mavenの実行JDKとコンパイル対象を確認する

当時はEclipseのJREを変更すると通ることがありました。切り分けでは、まず mvn -v に出るJavaのバージョンを確認し、mvn help:effective-pom で親POMや有効プロファイルを含めたcompiler pluginの設定を確認します。java-version など独自のプロパティは、コンパイラ設定から参照されているかも確認します。

当時のEclipseのビルドパス設定

JDK 17で、コンパイル対象をJava 5にした次のPOMを使うと、同種のエラーを再現できます。Java 5を前提にした設定を使う古いプロジェクトの切り分け用です。

<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>example</groupId>
  <artifactId>maven-release-sample-legacy</artifactId>
  <version>1.0</version>
  <properties>
    <maven.compiler.source>1.5</maven.compiler.source>
    <maven.compiler.target>1.5</maven.compiler.target>
  </properties>
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.1</version>
      </plugin>
    </plugins>
  </build>
</project>
mvn -f pom-legacy.xml clean compile
# ソース・オプション5は現在サポートされていません。
# ターゲット・オプション5は現在サポートされていません。

でも気になることが

当時は target を消した後に再発しました。コンパイル済みファイルが残った状態での成功と区別するため、修正後も clean compile で確認します。下のPOMでは、JDK 17で実行し、Java 8向けにコンパイルしています。対象バージョンはプロジェクトが実際に使うJavaに合わせます。

<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>example</groupId>
  <artifactId>maven-release-sample</artifactId>
  <version>1.0</version>
  <properties>
    <maven.compiler.release>8</maven.compiler.release>
  </properties>
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.14.1</version>
      </plugin>
    </plugins>
  </build>
</project>
public class Demo {
    public static void main(String[] args) {
        System.out.println("compiler target ok");
    }
}
mvn clean compile
java -cp target/classes Demo
# compiler target ok

出典 MavenのJavaターゲット設定ガイド

-実装・エラー解決
-,