spring - 如何在没有动态 Web 模块 3.0 方面黑客的情况下将 jdk 9 maven spring boot 2 项目导入 eclipse ee 氧气?
问题描述
我想将现有的 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 环境变量在 Windows 7 上设置为 jdk 9。我在 PATH 变量中有 %JAVA_HOME%\bin。
我没有在任何地方安装较旧的 jdk。我安装了一个 jdk10,但是当只安装一个 jdk 时仍然会发生这些错误。
当我将 Eclipse Neon 与 jdk 8 一起使用时,我曾经能够毫无问题地将 maven 项目导入 eclipse。
我将我的 poms 更新为 jdk 9,因此我可以迁移到 Spring Boot 2.0.2.RELEASE
在所有新版本的测试运行之间 - 我做了这些缓存清理尝试:
- 删除eclipse解压的zip
- 删除 [userhome]/.eclipse
- 删除 [source-project]/.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 的 1.9 设置 - 所以我必须在 Eclipse 设置中再次设置它。Eclipse Neon 和 jdk8 没有发生这种情况
以下是我在上面尝试过的一些链接:
解决方案
解决方案是java版本使用“9”而不是“1.9”,所以pom中的部分显示为:
<maven.compiler.target>9</maven.compiler.target>
<maven.compiler.source>9</maven.compiler.source>
这允许 m2 eclipse 插件使用其预期的 java 版本号表示来导入项目。
推荐阅读
- powershell - 在非常大的池中有效地找到匹配的子网
- angularjs - 在 typeahead 中选择项目返回空白值
- go - 当前的 GoLang SDK for Google Dataflow 是否支持自动缩放和并行处理?
- javascript - 如何使用 webpack 下载 jquery?
- excel - 查找 + 将 2 个单元格与另一张表匹配
- java - 如果在 Java 中不满足“X”值,则在循环中重新打印行
- methods - 扩展ABAP中被覆盖方法的接口
- sql-server - SQL Server 视图删除重复项
- javascript - 编写一个 sum() 函数,它接受一个数字数组
- date - 如果引用的单元格是今天的月/日(不是年),则突出显示一个单元格