,java,eclipse,maven,java-9,java-module"/>

首页 > 解决方案 > 排除依赖项无助于修复“包 org.w3c.dom 可以从多个模块访问:, java.xml"

问题描述

在尝试设置 Java 版本 > 9 的项目时,我遇到了依赖项和 Java 模块系统的问题。我知道有一些关于这个主题的帖子(例如这个这个),但解决方案(从依赖项中排除包)似乎对我没有帮助。
在一些与 XML 解析相关的导入中,我收到以下错误The package org.w3c.dom is accessible from more than one module: <unnamed>, java.xml

我使用了“打开类型”对话框,发现实际上有两个提供程序,例如 org.w3c.dom.Document。 org.w3c.dom.Document 的两个提供者

这个rmlmapper-4.9.1.jar目前是我项目中唯一的 maven 依赖项,我尝试按照此处的建议排除 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.domusingmvn dependency:tree的包,如何找到需要排除的包?

标签: javaeclipsemavenjava-9java-module

解决方案


从您提供的 Eclipse 快照来看,该包似乎org.w3c.dom嵌入在rmlmapper依赖项 Jar 本身中(Jar 可能将其自己的依赖项捆绑在其中)。因此exclusion它将不起作用,因为它仅排除传递依赖项(而不是捆绑包)。即使可以排除包,另一种方法是使用此处回答java.xml的选项排除模块。请注意,如果还捆绑了其他 JDK 类,您可能必须对其他模块执行此操作。--limit-modulesrmlmapper

无论哪种方式,最好的解决方案是联系rmlmapper库的所有者并让他们知道 Java 9+ 上的问题,因为他们可能没有升级他们的项目以支持该版本。


推荐阅读