事象
Eclipseで「動的 Web モジュール 3.1 は Java 1.7 またはそれ以降を要求します」と表示されました。Javaファセットを11にしても、Mavenのプロジェクト更新でJavaの設定が古い値に戻る状況です。
環境
当時はEclipse 2019-12、Maven、Java 11を使用しました。以下のPOM例はJDK 17とMavenでコンパイル対象をJava 11に揃える例です。
詳細
Eclipse側でファセットを変更しても、Mavenプロジェクトを再同期するとPOM側のJava設定が使われることがあります。mvn -v で実行JDK、mvn help:effective-pom で有効なコンパイル設定を確認してから、EclipseのJREとファセットを見ます。
対応
Mavenにてコンパイルに使用するJavaのバージョンを明記する。
下のPOMではコンパイル対象を11にしています。既存POMへ反映するときは、親POM・プロファイル・プラグインで設定が重ならないかを確認してください。
<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-eclipse-java11-sample</artifactId>
<version>1.0</version>
<properties>
<maven.compiler.release>11</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
javap -verbose -classpath target/classes Demo
# major version: 55Mavenで通った後、Eclipseで「Maven → プロジェクトの更新」を行い、JREシステムライブラリーとJavaファセットが11を指すことを確認します。Eclipseが対象プロジェクトで使えるJDKを認識していることも確認してください。
