我正在将 Java 8 项目迁移到 Java 11。使用的 IDE 是 Eclipse 2020-09。我还没有模块化该项目。
对于以下进口:
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
我收到编译时错误消息:
The package org.w3c.dom is accessible from more than one module: <unnamed>, java.xml
我已经检查了我的项目并org.w3c.dom软件包不存在于第 3 方库中,也不由项目 jar 中的任何传递依赖项添加。
但请注意,org.w3c.dom.Document 是一个接口,我发现很少有库实现该接口。这是根本原因吗
包可以从多个模块访问
信息 ?
以下是 Eclipse 项目中 org.w3c.dom.Document 的实现者 https://i.stack.imgur.com/98iaD.png
正如您在上面的屏幕截图中看到的,JBoss EAP 7.3 运行时库包含以下实现org.w3c.dom.Document
。说 JBoss 运行时库导致我遇到的 Java 11 迁移问题是否正确?
Java 9 引入了 JLS §7.4.3 中定义的新要求。每个限定类型名称都要求其前缀是唯一可见的包。不兼容性是由于早期 Java 版本中允许的传递依赖关系造成的。
当项目属性、Java 编译器中的“编译器合规级别”设置为高于“1.8”时,Eclipse 将报告违反此要求的行为。由于使用 Streaming 10.6 或更高版本时的自定义 Java 实现将在 Java 11 JVM 中运行,因此必须解决这些问题。
分辨率选择是:
- 将库升级到 Java 11 兼容版本,无需
传递依赖,
- 在 POM 中明确排除冲突
依赖管理,或者
- 仅导入即可避免冲突
所需的类,并且在导入时不要使用通配符 (*)
声明。
在所有情况下,都需要通过了解每个库将哪些包带入项目以及这些库中的类的具体用途来进行一些调查,以找到冲突的根源。要查看每个库向项目公开的依赖项,请使用:
mvn dependency:tree
这将提供信息来查找需要显式导入或排除的内容。
参考自:https://support.tibco.com/s/article/Upgrading-Streaming-projects-to-use-Java-11-package-is-accessible-from-more-than-one-module https://support.tibco.com/s/article/Upgrading-Streaming-projects-to-use-Java-11-package-is-accessible-from-more-than-one-module
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)