Java

Eclipseで「動的 Web モジュール 3.1 は Java 1.7 またはそれ以降 を要求します」が解消されない時の対応

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を使うと思ってエラーしていたものと思われます。

###############お知らせ################
ブログランキングのITカテゴリに参加してみました。
この記事が役に立ったなどお力になれたら、 このバナーを押していただけると嬉しいです。

#####################################

-Java