如何解决Java JPMS下包可从多个模块访问的构建报错
拆分包构建报错的落地解决方案
直接可执行的删除操作
定位到项目的WEB-INF/lib目录,删除以下和JDK内置模块路径冲突的老旧依赖包即可彻底解决报错:
dom.jar:内置org.w3c.dom包,与JDKjava.xml模块路径完全重复sax.jar:内置org.xml.sax包,与JDKjava.xml模块路径完全重复jaxp-api.jar:内置javax.xml.parsers包,与JDKjava.xml模块路径完全重复xml-apis.jar:为上述三个包的集合封装,同样覆盖JDK内置XML API路径- 若目录下存在旧版
plugin.jar(来自历史JRE Applet组件)也一并删除,其内置的netscape.javascript包会与JDKjdk.jsobject模块触发同类冲突
注意:同目录下的
xercesImpl.jar为XML解析实现包,未覆盖JDK核心包路径,无需删除,误删会导致XML解析逻辑缺失。
其他排查项说明
- 无
module-info.java仍报错属于正常逻辑:JPMS会将classpath下所有未定义模块信息的依赖统一归为<unnamed>无名模块,只要无名模块和JDK命名模块存在同路径包,就会触发拆分包校验拦截,和项目是否手动编写module-info.java没有必然联系。 - 删除
nbproject目录、build.xml文件无效:两类文件为NetBeans IDE专属项目配置,使用VS Code开发时,这部分配置不参与项目依赖加载逻辑,删除后WEB-INF/lib下的冲突包依然会被自动加入classpath触发报错。 - 系统环境变量未配置classpath/modulepath不影响冲突触发:Java Web项目默认会自动将
WEB-INF/lib下所有jar包加入运行/构建classpath,不需要手动配置全局环境变量。
修复后校验操作
删除冲突包后,清理VS Code Java服务缓存避免旧索引残留:
- 按快捷键
Ctrl+Shift+P唤起命令面板 - 执行
Java: Clean Java Language Server Workspace命令 - 等待语言服务自动重启后重新构建项目,报错即可完全消除。
内容的提问来源于stack exchange,提问作者Ian Boyd
相关产品推荐
相关产品推荐

