栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

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

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

我认为从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
到您的项目,你可以控制通过 需要 哪些模块项目读取,无论是
requiresjava.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进行了改进。可以在在线帮助中找到最新文档。


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/437360.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号