问题描述
尝试设置 Java 版本 > 9 的项目时,我遇到了依赖项和 Java 模块系统的问题。我知道有一些关于此主题的帖子(例如 this one 或 this one),但解决方案(从依赖项中排除包)似乎对我没有帮助。
在一些与 XML 解析相关的导入中,我收到以下错误 The package org.w3c.dom is accessible from more than one module: <unnamed>,java.xml
我使用了“打开类型”对话框,发现实际上有两个提供程序,例如org.w3c.dom.Document。
这个 rmlmapper-4.9.1.jar 目前是我项目中唯一的 maven 依赖项,我尝试按照建议的 here 排除 xml-apis。如您所见,我还添加了 org.w3c.dom。
<dependencies>
<dependency>
<groupId>be.ugent.rml</groupId>
<artifactId>rmlmapper</artifactId>
<version>4.9.1</version>
<exclusions>
<exclusion>
<groupId>xml-apis</groupId>
<artifactId>xml-apis</artifactId>
</exclusion>
<exclusion>
<groupId>org.w3c</groupId>
<artifactId>dom</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
不幸的是,这无济于事,错误仍然存在。请注意,我可以构建项目,但在运行时会出错。我是否排除了错误的包裹?我找不到使用 org.w3c.dom
提供 mvn dependency:tree
的包,那么如何找到需要排除的包?
解决方法
从您提供的 Eclipse 快照来看,包 org.w3c.dom
似乎嵌入在 rmlmapper
依赖项 Jar 本身中(Jar 可能将其自己的依赖项捆绑在其中)。因此 exclusion
将不起作用,因为它只排除传递依赖项(不是捆绑包)。即使 it's possible to exclude the package,另一种方法是排除 java.xml
模块,并使用 --limit-modules
选项作为回答 here。请注意,如果 rmlmapper
还捆绑了其他 JDK 类,您可能必须对其他模块执行此操作。
无论哪种方式,最好的解决方案是联系 rmlmapper
库的所有者,让他们知道 Java 9+ 上的问题,因为他们可能没有升级项目以支持该版本。