Java 8迁移至Java 11时Eclipse报javax.xml.datatype多模块访问错误求助
Java 8迁移Java 11 Eclipse包冲突问题解决方案
方案1:Eclipse原生配置指定包加载优先级(直接匹配需求)
这个配置不需要调整项目依赖,就能实现javax.xml.datatype包优先从类路径加载:
- 右键点击目标项目,选择属性(Properties)
- 进入左侧菜单的Java构建路径(Java Build Path),切换到*库(Libraries)*标签页
- 展开JRE系统库(JRE System Library [JavaSE-11])条目,选中子项模块访问规则(Module access rules),点击右侧的*编辑(Edit)*按钮
- 在弹出的规则配置窗口点击添加(Add),规则类型选择禁止(Forbidden),规则模式填入
javax/xml/datatype/**,依次点击确认保存所有配置
配置完成后Eclipse会禁止从JRE的java.xml模块读取javax.xml.datatype包下的所有类,只会从类路径的xml-apis依赖加载,编译报错直接消失,同时java.xml模块下的其他包不受影响,不会出现额外依赖缺失问题。
方案2:依赖调整从根源解决冲突
如果你能接受调整依赖,这个方案兼容性更强:
- 保留ivy.xml中的
<exclude org="xml-apis"/>配置,消除重复包冲突 - 额外添加Java 11兼容的XML相关运行时依赖,避免出现NoClassDefFoundError:
<dependency org="javax.xml.bind" name="jaxb-api" rev="2.3.1" /> <dependency org="com.sun.xml.bind" name="jaxb-impl" rev="2.3.1" /> <dependency org="com.sun.xml.bind" name="jaxb-core" rev="2.3.1" />
若你的项目仅依赖
javax.xml.datatype下的类,仅添加jaxb-api依赖即可满足运行时需求。
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

