当前位置: 首页 > 知识库问答 >
问题:

Java 11迁移:可以从多个模块问题访问包

易波涛
2023-03-14

我正在将一个Java8项目迁移到Java11。使用的IDE是Eclipse2020-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

我已经检查了我的项目和组织。w3c。dom包不存在于第三方LIB中,也不由项目JAR中的任何可传递依赖项添加。

但是请注意,org。w3c。多姆。文档是一个接口,我发现很少有库实现这个接口。这是问题的根源吗

可以从多个模块访问包

留言?

下面是org的实现者。w3c。多姆。Eclipse项目中的文档

正如您在上面的屏幕截图中所看到的,JBoss EAP 7.3运行时库包含org的实现。w3c。多姆。文档。说JBoss运行库导致了我面临的Java11迁移问题,对吗?

共有1个答案

梁浩涆
2023-03-14

Java 9引入了JLS§7.4.3中定义的新要求。每个限定类型名称都要求其前缀是唯一可见的包。这种不兼容性是由于以前的Java版本中允许的可传递依赖关系造成的。

当项目属性、Java编译器“编译器合规性级别”设置为高于“1.8”时,Eclipse将报告违反此要求的情况。由于使用Streaming 10.6或更高版本时的自定义Java实现将在Java11 JVM中运行,因此必须解决这些问题。

解决方案的选择是:

  1. 将这些库升级到与Java 11兼容的版本,而不使用可传递的依赖项,
  2. 在POM dependencyManagement中明确排除冲突,或
  3. 通过只导入所需的类而不在import语句中使用通配符(*)来避免冲突

在所有情况下,都需要进行一些调查,通过了解每个库给项目带来的包以及这些库中的类的具体用途来找到冲突的根源。要查看每个库向项目公开的依赖项,请使用:

mvn依赖:树

这将提供信息来查找需要显式导入或排除的内容。

引用自:https://support.tibco.com/s/article/Upgrading-Streaming-projects-to-use-Java-11-package-is-accessible-from-more-than-one-module

 类似资料:
  • 我的项目在Java1.8u151中运行良好。我正在尝试将它升级到Java12,但是我得到了以下错误。 这是唯一的错误,在Java12中的大多数包中都会重复出现,但在Java8中效果良好。 我已尝试将所有jar文件从模块路径移动到类路径。模块路径中只有Java 12库。我在Java版本的软件包中寻找任何不推荐的东西。我用不同的Java版本尝试了3种不同的系统(都运行OS-X10.13.6、10.13

  • 我已经研究了好几天了,似乎所有的答案都是特定于Eclipse的。我在Visual Studio Code上遇到此错误: 这将出现在包含导入。 使用: Java 11.0.4 Gradle构建时没有问题,因此错误消息表示终端和VSCode之间存在某种断开连接。 到目前为止,我已经: 确保和匹配 任何帮助都将不胜感激,谢谢您的时间! 我知道这个问题,但一直没有答案。

  • 尝试在JMX控制台中注册MBean时,我收到以下错误消息: 我正在使用Eclipse,我的项目结构中没有文件。 当我注释我对javaeeapi的依赖关系时,错误消失了,但是包不是JAR的一部分。

  • 我有一个项目,它在gradle下以及在IntelliJ IDE运行配置下都能很好地构建。 但它在VSCode集成开发环境中出现了一个问题: 没有模块信息。整个项目中的java文件。 列出的模块有: JDK的主设置为: 它是版本: 我尝试更改JDK以使用与IntelliJ使用的相同的JDK,但问题仍然相同。 JDK版本的IntelliJ是: VSCode版本为:

  • Eclipse RCP 2020-09,Java JDK 11,Window10 步 1.创建一个简单的插件项目(单击[下一步][完成]) 2.要求捆绑包:org.eclipse.jdt.core 3.创建Java文件 编译错误:

  • 我的环境: Java 11 不确定如何修复此错误: