You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot应用从Java 8迁移至Java 11时遭遇org.w3c.dom包多模块冲突问题求助

解决Spring Boot从Java 8迁移到Java 11时的org.w3c.dom包冲突问题

这个错误是Java 9+引入的模块化系统(JPMS)导致的——org.w3c.dom是JDK自带模块java.xml的一部分,但你的项目依赖中还有其他JAR包也包含了这个包,导致模块路径上出现重复,JVM不知道该用哪一个。你注释了xerces依赖但没解决,说明还有其他依赖在偷偷引入重复的包,咱们一步步来处理:

第一步:找出隐藏的冲突依赖

首先用Maven命令排查整个依赖树,定位到底哪个依赖引入了包含org.w3c.dom的JAR(比如xml-apis、xercesImpl这类):

mvn dependency:tree -Dincludes=xml-apis,xercesImpl

执行后会输出所有包含这两个包的依赖路径,这样就能找到“元凶”。

第二步:排除冲突的依赖

找到对应的依赖后,在你的pom.xml里给它加上<exclusions>,把重复的包排除掉。比如如果是camel-cxf或者activemq-camel引入的,就这么改:

<!-- 以camel-cxf为例 -->
<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-cxf</artifactId>
    <exclusions>
        <exclusion>
            <groupId>xml-apis</groupId>
            <artifactId>xml-apis</artifactId>
        </exclusion>
        <exclusion>
            <groupId>xerces</groupId>
            <artifactId>xercesImpl</artifactId>
        </exclusion>
    </exclusions>
</dependency>

同样检查activemq-camel依赖,做相同的排除操作。

第三步:修正pom里的拼写错误

注意到你pom里的groupId都写成了org.springframwork(少了一个e),正确的应该是org.springframework!另外spring-boot-starter-jersy的拼写也有误,应为spring-boot-starter-jersey。这些错误可能导致依赖拉取异常,甚至引入不必要的兼容包,先把这些拼写问题修正过来。

第四步:调整Eclipse的模块配置

Eclipse对JPMS的处理有时候会比较“敏感”,可以做以下检查:

  • 右键项目 → Properties → Java Build Path → Modules
  • 确保java.xml模块是被正确引用的,没有把外部JAR中的org.w3c.dom标记为模块
  • 如果有冲突的JAR,在Order and Export里调整优先级,让JDK自带的模块优先

附:你提供的原始pom配置(标注错误)

<properties>
    <java.version>11</java.version>
    <maven.compiler.source>${java.version}</maven.compiler.source>
    <maven.compiler.target>${java.version}</maven.compiler.target>
</properties>
<profiles>
    <profile>
        <id>dev</id>
        <dependencies>
            <dependency>
                <groupId>org.apache.activemq</groupId>
                <artifactId>activemq-camel</artifactId>
            </dependency>
        </dependencies>
    </profile>
</profiles>
<dependencies>
    <dependency>
        <groupId>org.springframwork</groupId> <!-- 错误:应为org.springframework -->
        <artifactId>spring-boot-starter</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframwork</groupId> <!-- 错误:应为org.springframework -->
        <artifactId>spring-jms</artifactId>
        <version>5.1.3.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframwork</groupId> <!-- 错误:应为org.springframework -->
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframwork</groupId> <!-- 错误:应为org.springframework -->
        <artifactId>spring-boot-starter-jersy</artifactId> <!-- 错误:应为spring-boot-starter-jersey -->
    </dependency>
    <dependency>
        <groupId>org.springframwork</groupId> <!-- 错误:应为org.springframework -->
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.apache.camel</groupId>
        <artifactId>camel-cxf</artifactId>
    </dependency>
</dependencies>

按照上面的步骤操作后,应该就能解决这个包冲突问题了。

内容的提问来源于stack exchange,提问作者subba rao ikkurthi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 05:22:38