如何在没有动态 Web 模块 3.0 facet hacks 的情况下将 jdk 9 maven spring boot 2 项目导入 eclipse ee 氧气?

Posted

技术标签:

【中文标题】如何在没有动态 Web 模块 3.0 facet hacks 的情况下将 jdk 9 maven spring boot 2 项目导入 eclipse ee 氧气?【英文标题】:How to import jdk 9 maven spring boot 2 projects into eclipse ee oxygen without Dynamic Web Module 3.0 facet hacks? 【发布时间】:2018-05-17 19:57:19 【问题描述】:

我想将现有的 jdk9(或 10)maven 项目导入 eclipse ee Oxygen。

即使在 pom 中以各种方式指定 1.9 时,也会显示 eclipse 问题标记:

构建路径指定执行环境 J2SE-1.5。工作空间中没有安装与此环境严格兼容的 JRE。

动态 Web 模块 3.1 需要 Java 1.7 或更高版本。

我尝试让我的 pom 构建插件包括:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <configuration>
        <source>1.9</source>
        <target>1.9</target>
    </configuration>
</plugin>

或顶部的这些属性:

<maven.compiler.target>1.9</maven.compiler.target>
<maven.compiler.source>1.9</maven.compiler.source> 

我可以通过确保以下设置摆脱“没有 JRE...”日食问题标记:

Windows - 首选项 - Java - jdk 1.9 项目 - 属性 - 构建路径 - jdk 1.9 项目 - 属性 - Java 编译器 - 1.9 合规性

既然我的 pom 指定 1.9,难道不应该不需要这些项目设置吗? - m2 eclipse 不应该将设置导入为 1.9 吗?

我无法删除此问题标记:“Dynamic Web Module 3.1 需要 Java 1.7 或更高版本。”

我尝试过的事情是:

设置不同的组合:项目构面“动态 Web 模块”为 3.1 或 3.0 - 以及将 Java 构面设置为 9。 将这两个方面都设置为未选中

编辑 eclipse 生成的 .settings ~facets.xml 文件以将“动态 Web 模块”设置为 3.0/3.1/ 或从文件中删除该行

指定较旧的 javax.servlet-api 依赖项

javax.servlet javax.servlet-api 3.1.0 假如

我正在使用注释配置 Spring - 我没有 Web.xml。我的 pom 包装是 WAR。

我的 JAVA_HOME 环境变量设置为 jdk 9 - 在 Windows 7 上。我在 PATH 变量中有 %JAVA_HOME%\bin。

我没有在任何地方安装较旧的 jdk。我安装了一个 jdk10,但是只安装一个 jdk 时仍然会出现这些错误。

当我使用带有 jdk 8 的 Eclipse Neon 时,我曾经能够毫无问题地将 maven 项目导入到 eclipse 中。

我将我的 poms 更新为 jdk 9,因此我可以迁移到 Spring Boot 2.0.2.RELEASE

在所有新版本的测试运行之间 - 我会尝试这些缓存清理:

删除 Eclipse 提取的 zip 文件 删除 [userhome]/.eclipse 删除[源项目]/.settings 从 ide 中删除项目 重新提取 Eclipse,设置 Windows 首选项 jdk9(如果还没有)重新导入 pom

我尝试使用 Spring Tool Suite 变体 - 但遇到了相同的“动态 Web 模块 3.1 需要 Java 1.7 或更新版本”。错误

我看过其他人的帖子 - 通常比现在大 1 岁。他们通常会提到我在上面尝试过的所有事情 - 但我的“动态 Web 模块 3.1 需要 Java 1.7 或更新版本”。错误并没有像其他人那样消失。

这是一个已知问题,对最新版本的任何人都不起作用 - 还是假设它起作用?

我注意到并看到其他人评论说,通过 eclipse 运行 maven 构建会导致那些以前的“eclipse jdk 版本设置”消失, 就像它尝试使用 m2eclipse 再次从 pom 重新导入设置一样 - 但会产生不希望从 pom - 所以我必须在 Eclipse 设置中再次设置它。 Eclipse Neon 和 jdk8 不会发生这种情况

以下是我在上面尝试过的一些链接:

Changing Dynamic Web Module version in Eclipse Maven Project

https://crunchify.com/how-to-fix-cannot-change-version-of-project-facet-dynamic-web-module-to-3-0-error-in-eclipse/

【问题讨论】:

【参考方案1】:

解决方案是java版本使用“9”而不是“1.9”,所以pom中的部分显示为:

<maven.compiler.target>9</maven.compiler.target>
<maven.compiler.source>9</maven.compiler.source> 

这允许 m2 eclipse 插件使用其预期的 java 版本号表示来导入项目。

【讨论】:

以上是关于如何在没有动态 Web 模块 3.0 facet hacks 的情况下将 jdk 9 maven spring boot 2 项目导入 eclipse ee 氧气?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用指定版本2.3的JSF Facet创建Eclipse动态Web项目?

解决Cannot change version of project facet Dynamic web module to 3.0

Cannot change version of project facet Dynamic Web Module to 3.0

Cannot change version of project facet Dynamic web module to 3.0

动态 Web 模块 3.0 -- 3.1

解决maven项目Cannot change version of project facet Dynamic web module to 3.0/3.1