首页 > 解决方案 > Spring Boot 中附带的 Mockito 无法附加到 JVM (OpenJDK 11)

问题描述

我有一堆使用 Mockito 进行单元测试的 Spring Boot 2.5.6 应用程序。使用的 Mockito 版本是 SB 本身附带的版本 (3.9.0)。JDK 是 OpenJDK 11.0.12+0。直到昨天一切正常,今天早上我突然无法运行任何基于 Mockito 的测试,所有测试都失败了:

Caused by: java.lang.IllegalStateException: Failed to load interface org.mockito.plugins.MockMaker implementation declared in java.lang.CompoundEnumeration@7c51f34b
Caused by: java.lang.reflect.InvocationTargetException
Caused by: org.mockito.exceptions.base.MockitoInitializationException: 

Could not initialize inline Byte Buddy mock maker.

It appears as if your JDK does not supply a working agent attachment mechanism.
Java               : 11
JVM vendor name    : Homebrew
JVM vendor version : 11.0.12+0
JVM name           : OpenJDK 64-Bit Server VM
JVM version        : 11.0.12+0
JVM info           : mixed mode
OS name            : Mac OS X
OS version         : 12.0.1

Caused by: java.lang.IllegalStateException: Could not self-attach to current VM using external process

我无法识别昨天和今天之间发生的任何变化。

我尝试过但没有成功的事情:

万一这很重要,这是在 MBP M1 上。团队的其他成员能够毫无问题地构建。

标签: javaspring-bootmacosmockito

解决方案


不确定这将是多少答案,但问题现在(似乎)是自我修复的......我将描述我所做的以及发生了什么,以防它帮助其他用户遇到类似问题。

在尝试问题中描述的所有事情失败后,我不得不(再次)重新启动笔记本电脑以解决一个不相关的问题(Zoom 无法启动)。重新启动后,笔记本电脑只是崩溃并自行重新启动。然后它第二次做了同样的事情。在第三次自动重启后,我在构建 Java 应用程序时不再遇到问题。

我的猜测是 NVRAM 以某种方式损坏,这影响了 JVM 接受传入的附件请求的能力。在 MBP M1 上,无法像 Intel 型号那样重置 NVRAM(按 Cmd + Opt + R + P),相反,当 NVRAM检测到错误时,它应该能够自我修复。我想在 MBP 崩溃后最终决定修复 NVRAM,这就是构建重新开始工作的原因。

更新:我现在又遇到了几次这个问题,每次“解决方案”都是重新启动笔记本电脑几次,直到它崩溃。之后问题就会消失。这增加了问题中指定的硬件和软件组合存在一些固有的不稳定性的想法。如果其他人有同样的问题,我会将其保留为“已回答”的问题。


推荐阅读