当前位置: 首页 > 面试题库 >

将构建路径切换到JDK 10后,Eclipse无法找到与XML相关的类

云胤
2023-03-14
问题内容

我正在Eclipse中开发一个Maven项目(分支平台-
bom_brussels-sr7)。当我最近尝试切换Java构建路径,为项目JDK
10,Eclipse构建再也找不到类,如javax.xml.xpath.XPathorg.w3c.dom.Documentorg.xml.sax.SAXException。似乎只有与XML相关的类会受到影响,主要是受到Maven依赖关系的影响xml- apis-1.4.01

从Eclipse尝试Maven构建可以正常工作。假定缺少的类之一上的Ctrl-
LeftClick会找到该类并在Eclipse编辑器中将其打开。似乎只有Eclipse构建受到影响。

我尝试了几件事,但没有帮助。我试过了:

  • 清洁项目
  • Eclipse的不同版本:氧气和光子。
  • 使用JDK 8和JDK 10运行Eclipse本身。
  • 更改项目的编译器合规性级别。它使用JDK 8构建路径下的遵从性级别8和10进行构建,而使用JDK 10构建路径中的这两个都失败。

问题答案:

我认为从Java 1.8迁移的项目仍然没有module-info.java。这意味着您正在“未命名的模块”中编译代码。

未命名模块中的代码“读取”所有可观察到的命名和未命名模块,特别是它从JRE系统库中读取模块“
java.xml”。该模块导出包,如java.xml.xpath

此外,您xml- apis.java在类路径上,该路径提供了另一组相同名称(java.xml.xpath和朋友)的软件包。据说它们与未命名的模块相关联,就像您自己的代码一样。

这种情况违反了JLS§7.4.3(最后一段)中定义
的“唯一可见性”要求
。特别是每个合格的类型名称Q.Id(JSL§6.5.5.2)都要求其前缀Q是唯一可见的包(为简单起见,我不考虑嵌套类型的情况)。Ergo:程序是非法的,必须被编译器拒绝。

这给我们留下了一个问题和两个解决方案:

(1)问题:javac为什么接受该程序?

(2)解决方案:如果您添加module-info.java到您的项目,你可以控制通过 需要 哪些模块项目读取,无论是requires java.xml;requires xml.apis;(其中“xml.apis”是“XML的API-1.4.01.jar自动模块名称)。

(3)解决方案:除了将您的项目变成一个模块之外,您仍然可以通过java.xml从可观察模块中排除来避免冲突。在命令行上,可以使用--limit- modules。Eclipse中的等效项是“模块化详细信息”对话框,另请参见JDT 4.8
New&Noteworthy(查找“
目录”
选项卡)。由于java.xml许多其他默认可观察的模块都隐式需要此模块,因此最好将除java.base右方(“显式包含的模块”)之外的所有内容推至左侧(“可用模块”)(并有选择地重新添加这些模块)您的项目需要的)。

PS:Eclipse仍然没有提供理想的错误消息,而不是“无法解决”,它实际上应该说:“包javax.xml.xpath可从多个模块访问:javax.xml,<未命名>。

PPS:这也很奇怪:改变JRE和类路径上的jar之间的顺序(这种顺序不是javac或JEP 261不支持的概念)会改变编译器的行为。

编辑:

  • 尽管javac怎么说,Alex Buckley 确认给定的情况是非法的。针对Javac的错误已提出为JDK-8215739。在Java 12发行前几个月,就已经确认了该错误。从2019年6月起,已经决定Java 13也将在未修复的情况下发布。对于Java 14同样如此。该错误是Java 15的临时计划,但该计划已在2020-04-20删除。
  • Eclipse错误消息已得到改进,以提及实际问题。
  • 在Eclipse 2019-06中,对解决方案(3)使用的UI进行了改进。可以在在线帮助中找到最新文档。


 类似资料:
  • 我不能构建发行版apk,但是我可以在调试模式下构建apk。当我在flutter channel master的时候,它是可以的,但是后来,我切换到master并得到了这些日志。实际上,如果我将切换回来,它将工作良好,但我的一些包不支持主控通道的功能,所以我必须是稳定的。 错误日志显示在以下位置: null

  • 主要内容:Eclipse 设置Java构建路径Eclipse 设置Java构建路径 在编译 Java 项目以发现依赖类时使用 Java 构建路径。它由以下项目组成 : 源文件夹中的代码。 与项目关联的 Jars 和 classes 文件夹。 此项目引用的项目导出的类和库。 可以使用 Java 项目属性对话框的 Java 构建路径页面查看和修改 java 构建路径。 要打开 Java 项目属性对话框,请在 Package Explorer 视图

  • 设置 Java 构建路径 Java构建路径用于在编译Java项目时找到依赖的类,包括以下几项: 源码包 项目相关的 jar 包及类文件 项目引用的的类库 我们可以通过使用 Java 项目属性对话框中的 Java Build Path(Java 构建路径)选项来查看和修改 Java 构建路径。 Java 项目属性对话框可以通过在 Package Explorer 视图中鼠标右击指定的 Java 项目

  • 问题内容: 我是Docker的新手,所以请允许我描述我执行的步骤。我在OS X上使用Docker(不是Docker工具箱)。我使用以下命令从Dockerfile构建了映像 Docker确认构建成功。 但是,我在任何地方都找不到图像。我看了这个问题,但是答案是针对Docker工具箱的,并且没有公认的答案所建议的文件夹。 问题答案: 您将可以通过以下命令查看您的docker映像: 并检查哪些容器正在d

  • 你好,有帮助的硒窗口和框架切换的家伙(或女孩),