Java11升级至Java17遇org.w3c.dom包多模块冲突问题求助
解决Java 17升级中"The package org.w3c.dom is accessible from more than one module: , java.xml"错误
以下是几个针对性的排查和解决方向:
检查项目源码中的自定义包
排查项目src目录下是否存在org/w3c/dom的自定义包结构,比如自己写的类不小心放在了这个JDK原生包路径下。Java 17的模块系统会认为默认模块(unnamed module)和java.xml模块都导出了这个包,从而触发冲突。如果找到这类代码,直接重命名包或者移除相关类。排查Maven编译插件的参数配置
打开pom.xml查看maven-compiler-plugin的配置,检查是否添加了不必要的--add-exports或--add-modules参数,比如:<compilerArgs> <arg>--add-exports=java.xml/org.w3c.dom=ALL-UNNAMED</arg> </compilerArgs>这类参数会强制将
java.xml的包导出到默认模块,可能和现有模块规则冲突。尝试移除该参数后重新编译。检查系统依赖或本地JAR
查看pom.xml中<scope>system</scope>的依赖,这类依赖不会出现在mvn dependency:tree的输出里,但可能包含org.w3c.dom包。同时检查项目根目录的lib文件夹,确认是否有遗留的第三方JAR包含该包路径,如有则移除或替换为兼容Java 17的版本。清理缓存并重新构建
执行Maven清理命令刷新依赖:mvn clean install -U同时清理IDE的缓存(比如IntelliJ IDEA选择
File -> Invalidate Caches...),重新导入项目后再尝试编译。检查模块描述文件(若使用JPMS)
如果项目启用了Java模块系统,打开module-info.java检查:- 是否重复声明了
requires java.xml - 是否错误地添加了
exports org.w3c.dom语句(这会和JDK的java.xml模块导出的包冲突)
修正后确保模块声明仅包含必要的依赖,示例:
module your.project.id { requires java.xml; // 移除不必要的exports语句 }- 是否重复声明了
内容的提问来源于stack exchange,提问作者Ruchi
相关产品推荐
相关产品推荐

