SpringBoot 3.x迁移Gradle项目:JAXB依赖报错致单元测试失败求助
Maven转Gradle+SpringBoot 3.x迁移后单元测试失败问题
近期将Maven项目转为Gradle,同时从SpringBoot 2.7迁移至3.x版本,采用Java 17并替换javax为Jakarta,但多数单元测试失败,出现如下警告:
warning: unknown enum constant XmlAccessType.FIELD
reason: class file for javax.xml.bind.annotation.XmlAccessType not found
已排除所有javax依赖,引入所需Jakarta依赖,尝试多种方法仍无法解决问题。
详细信息
最初使用以下依赖:
implementation "jakarta.xml.bind:jakarta.xml.bind-api:3.0.1" implementation "org.glassfish.jaxb:jaxb-runtime:3.0.2"
对应导入语句:
import jakarta.xml.bind.JAXBContext; import jakarta.xml.bind.JAXBException; import jakarta.xml.bind.Marshaller; import jakarta.xml.bind.Unmarshaller;
此时出现上述警告。
参考相关文章后,尝试更换为旧版本依赖:
implementation "jakarta.xml.bind:jakarta.xml.bind-api:2.3.2" implementation "org.glassfish.jaxb:jaxb-runtime:2.3.2"
对应导入语句:
import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBException; import javax.xml.bind.Marshaller; import javax.xml.bind.Unmarshaller;
此时上述警告消失,但单元测试仍全部失败,示例错误栈如下:
java.lang.IllegalStateException at DefaultCacheAwareContextLoaderDelegate.java:180 Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException at ConstructorResolver.java:795 Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException at ConstructorResolver.java:795 Caused by: org.springframework.beans.factory.BeanCreationException at ConstructorResolver.java:648 Caused by: org.springframework.beans.BeanInstantiationException at SimpleInstantiationStrategy.java:177 Caused by: java.lang.NoClassDefFoundError at JaxbConfiguration.java:20 Caused by: java.lang.ClassNotFoundException at BuiltinClassLoader.java:641
已完成以下排查:
- 确保未引入任何javax.xml.bind依赖
- 将所有依赖更新为Jakarta版本
- 添加了所需的Jakarta JAXB依赖(如上所示)
- 排除了javax.xml.bind的传递依赖
- 检查确认无类路径冲突
内容的提问来源于stack exchange,提问作者Linda Toomey
相关产品推荐
相关产品推荐

