升级至Jakarta和Java 17后出现org.jvnet.jaxb.lang.Equals类找不到异常
JAXB升级至Jakarta/Java17后出现org.jvnet.jaxb.lang.Equals找不到的问题
我正尝试将应用从javax/java8版本升级至jakarta/java17版本,升级过程中同步更新了jaxb相关包。我的build.gradle文件包含以下依赖:
implementation 'jakarta.xml.bind:jakarta.xml.bind-api:4.0.2' implementation 'org.glassfish.jaxb:jaxb-runtime:4.0.5' implementation 'org.jvnet.jaxb:jaxb-plugins-runtime:4.0.8' implementation 'org.jvnet.jaxb:jaxb-plugins-tools:4.0.8' implementation 'org.jvnet.jaxb:jaxb-plugins:4.0.8'
应用初始化时出现如下错误:
Caused by: java.lang.NoClassDefFoundError: org/jvnet/jaxb/lang/Equals
Caused by: java.lang.ClassNotFoundException: org.jvnet.jaxb.lang.Equals
为何已引入所有相关依赖,仍会出现org.jvnet.jaxb.lang.Equals类找不到的问题?
问题原因与解决方案
org.jvnet.jaxb.lang.Equals类并不在你当前引入的jaxb-plugins相关依赖中,它属于jaxb-basics组件。jaxb-plugins 4.x版本基于Jakarta EE 9+重构时,将原本内置的基础工具类(包括Lang包下的Equals、HashCode等)拆分到了独立的jaxb-basics模块中,因此仅引入jaxb-plugins系列依赖会缺失这些核心基础类。
解决步骤
- 添加jaxb-basics-runtime依赖到build.gradle:
implementation 'org.jvnet.jaxb:jaxb-basics-runtime:4.0.8'
这个依赖包含运行时所需的org.jvnet.jaxb.lang下的所有类。
- 若你的项目用到了JAXB代码生成插件(比如在编译期生成Java类),还需要添加jaxb-basics依赖:
implementation 'org.jvnet.jaxb:jaxb-basics:4.0.8'
注意事项
确保所有jaxb-basics相关依赖的版本与你当前使用的jaxb-plugins版本(4.0.8)保持一致,避免因版本不匹配导致的其他类缺失或兼容性问题。
内容的提问来源于stack exchange,提问作者tony
相关产品推荐
相关产品推荐

