SpringBoot项目Maven执行JUnit测试报NoClassDefFoundError错误求助
解决Maven打包时的
javax/xml/bind/JAXBException NoClassDefFoundError问题 我来帮你拆解这个问题:你在Eclipse里能正常跑JUnit测试和运行应用,但用mvn clean package就报错,跳过测试就正常,核心原因是JAXB API在JDK 9及以后版本中不再是默认内置的模块,而你的Hibernate依赖需要它来处理XML映射绑定。
为什么Eclipse里没问题?
大概率是你IDE配置的JDK是8版本——JDK8自带了JAXB的相关类,所以不管是运行应用还是跑测试,都能找到需要的类。但Maven命令行可能用了更高版本的JDK(9+),或者打包阶段的测试环境没有自动引入JAXB依赖,就触发了这个错误。
下面是两种靠谱的解决办法:
方法一:统一JDK版本到8
先确认你的Maven环境用的JDK版本:
- 运行命令
mvn -v查看输出里的Java版本
如果是JDK9+,而你的项目本来就是基于JDK8开发的,那可以:
- 修改系统的
JAVA_HOME环境变量,指向你的JDK8安装目录 - 或者直接在pom.xml里强制指定编译和运行的JDK版本,添加这段配置:
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1</version> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> </plugins> </build>
方法二:添加JAXB依赖(适合JDK9+场景)
如果你必须用JDK9及以上版本,那就手动把JAXB相关依赖加到pom.xml里,因为Hibernate的XmlMappingBinderAccess类需要这些:
<dependencies> <!-- JAXB核心依赖 --> <dependency> <groupId>javax.xml.bind</groupId> <artifactId>jaxb-api</artifactId> <version>2.3.1</version> </dependency> <dependency> <groupId>com.sun.xml.bind</groupId> <artifactId>jaxb-impl</artifactId> <version>2.3.1</version> <scope>runtime</scope> </dependency> <dependency> <groupId>com.sun.xml.bind</groupId> <artifactId>jaxb-core</artifactId> <version>2.3.0.1</version> </dependency> <dependency> <groupId>javax.activation</groupId> <artifactId>activation</artifactId> <version>1.1.1</version> </dependency> </dependencies>
加完之后再跑mvn clean package,应该就能正常通过测试并打包了。
内容的提问来源于stack exchange,提问作者Ramon De Les Olives
相关产品推荐
相关产品推荐

