最近在跟着视频学习springboot搭建,使用 mvn clean install进行打包时出现了问题。
- 主要问题:最顶层的
IllegalStateException
是由于插件初始化失败引起的。 - 次要问题:这是因为
MockitoInitializationException
,即 Byte Buddy mock maker 无法初始化。 - 根本原因:这由一个
IllegalArgumentException
引起,提示 Java Instrumentation API 的问题。 - 循环引用:提供了更多关于异常循环的信息,但不是根本原因。
问题的根本原因
- JDK 版本:Java 22 版本可能不完全支持 Mockito 所需的代理附件机制。这可能是因为 Java 22 是相对较新的版本,而某些库(如 Mockito 和 Byte Buddy)可能还未完全适配。
解决办法
Mockito 5 的开发文档中提到 由于我们使用了 JVM 内部 API,我们发现 JDK 最新版本的问题/不兼容性有所增加。最值得注意的是,JDK 17 进行了一些与当前子类 mockmaker 不兼容的更改。git文档
对于Mockito 5+ 和 jdk 17+ 在内联模拟生成器将不起作用,可以使用子类模拟生成器。
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-subclass</artifactId>
<version>5.12.0</version>
</dependency>
将这部分代码添加到依赖中,重新运行,问题得到解决。
错误堆栈:
-------------------------------------