Eclipseを使っていて、「動的 Web モジュール 3.1 は Java 1.7 またはそれ以降 を要求します。」がなかなか解消できなかったのでメモ。
事象
- Mavenを使用したJavaの開発環境において、Maven > プロジェクトの更新 を行うと使用するJavaのバージョンが1.6に戻ってしまう。
- プロジェクトファセットをJava11に設定し、コンパイルに使用するバージョンをJava11に設定しても「動的 Web モジュール 3.1 は Java 1.7 またはそれ以降 を要求します。」のエラーが消えない。
環境
- Eclipse 2019-12版
- (使いたいJavaのバージョン)Java11
- Maven
詳細
事象に記載の通りで、Maven > プロジェクトの更新を行うとJavaのバージョンが勝手にJava1.6に戻ってしまい、ラムダ式はJava1.8からですとか、Optionalは使用できませんというエラーが出てビルドできなくなりました。
各種設定を直接編集し、プロジェクトファセットのバージョンをJava11に変更して、プロジェクトのコンパイラバージョンを個別指定でJava11に設定してみても「動的 Web モジュール 3.1 は Java 1.7 またはそれ以降 を要求します。」のエラーが消えません。
この状態でMaven > プロジェクトの更新を実行すると使用するJavaのバージョンが1.6に戻ってしまいます。このとき、プロジェクトファセットはJava11のままでした。
対応
Mavenにてコンパイルに使用するJavaのバージョンを明記する。
単純でした。Eclipseの設定を手動で変更したとしても、Maven > プロジェクトの更新を実行するとMavenの設定で上書きされてしまいます。
そしてこの時に、MavenプロジェクトはMavenの情報を参照しているので、プロジェクトの各種設定を手動で変更してもエラーが解消されないようです。
以下の記述を追加してみたところ、Maven > プロジェクトの更新をしてもJava11がセットされるようになりました。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.5.1</version>
<configuration>
<source>11</source>
<target>11</target>
<compilerArgument>-Xlint:all</compilerArgument>
<showWarnings>true</showWarnings>
<showDeprecation>true</showDeprecation>
</configuration>
</plugin>
これによって、「動的 Web モジュール 3.1 は Java 1.7 またはそれ以降 を要求します。」のエラーも解消されました。
恐らく、今まではJava1.6がデフォルトでセットされていたため、Mavenがこちらの情報を優先していたためにJava1.6を使うと思ってエラーしていたものと思われます。