java - 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
我无法识别昨天和今天之间发生的任何变化。
我尝试过但没有成功的事情:
- 使用 Java 17 重新运行。
- 重新安装 Java 11。
- 安装来自不同供应商的 JDK 11 (Microsoft OpenJDK)
- 按照此处的建议,添加
-Djdk.attach.allowAttachSelf=true
到命令行和<argLine>
surefire配置中的参数 - 按照这里
-XX:+StartAttachListener
的建议添加 - 重新启动计算机
- 确保防火墙允许
java
进程按照此处接收传入连接 - (暂时)停止任何可能阻止连接发生的安全软件
- 查看
JAVA_HOME
我机器上的不同 Java 安装,以防进程尝试按照此处附加到错误的 Java
万一这很重要,这是在 MBP M1 上。团队的其他成员能够毫无问题地构建。
解决方案
不确定这将是多少答案,但问题现在(似乎)是自我修复的......我将描述我所做的以及发生了什么,以防它帮助其他用户遇到类似问题。
在尝试问题中描述的所有事情失败后,我不得不(再次)重新启动笔记本电脑以解决一个不相关的问题(Zoom 无法启动)。重新启动后,笔记本电脑只是崩溃并自行重新启动。然后它第二次做了同样的事情。在第三次自动重启后,我在构建 Java 应用程序时不再遇到问题。
我的猜测是 NVRAM 以某种方式损坏,这影响了 JVM 接受传入的附件请求的能力。在 MBP M1 上,无法像 Intel 型号那样重置 NVRAM(按 Cmd + Opt + R + P),相反,当 NVRAM检测到错误时,它应该能够自我修复。我想在 MBP 崩溃后最终决定修复 NVRAM,这就是构建重新开始工作的原因。
更新:我现在又遇到了几次这个问题,每次“解决方案”都是重新启动笔记本电脑几次,直到它崩溃。之后问题就会消失。这增加了问题中指定的硬件和软件组合存在一些固有的不稳定性的想法。如果其他人有同样的问题,我会将其保留为“已回答”的问题。
推荐阅读
- phpstorm - PhpStorm - 重构后禁用对齐类属性
- sql - SQL 计算列中不同值的总数
- java - 从keycloak获取用户最后一次会话中的当前日期和时间,而不是用户的最后一次登录时间?
- css - Chrome 地址栏导致我的移动网页滚动
- python - python中的if else条件
- javascript - 父项中的道具更改不会更新子项
- python - 如何在 python 代码中更改 kivy 中的屏幕转换方向?
- ios - 如何通过搜索栏获取数据
- ios - Veracode CWE ID 252:未经检查的返回值
- flutter - 在所有手机尺寸的应用程序左侧设置图标