*** java.lang.instrument ASSERTION FAILED 的含义/原因是什么:“!errorOutstanding”,消息转换方法调用失败?
当使用gradle运行我的测试时,我开始在控制台上获得下面的输出。此输出来自 JVM 而不是我的代码。Kotlin DSL 用于配置我的 gradle 构建。
*** java.lang.instrument ASSERTION FAILED ***: "!errorOutstanding" with message transform method call failed at line: 873
*** java.lang.instrument ASSERTION FAILED ***: "!errorOutstanding" with message transform method call failed at line: 873
*** java.lang.instrument ASSERTION FAILED ***: "!errorOutstanding" with message transform method call failed at line: 873
*** java.lang.instrument ASSERTION FAILED ***: "!errorOutstanding" with message transform method call failed at line: 873
这发生在Java 11上
java --version
openjdk 11.0.6 2020-01-14
OpenJDK Runtime Environment AdoptOpenJDK (build 11.0.6+10)
OpenJDK 64-Bit Server VM AdoptOpenJDK (build 11.0.6+10, mixed mode)
这个输出不是来自我的代码,它似乎来自JVM。没有列出以前版本的Java的文件名似乎有与此相关的错误 https://bugs.openjdk.java.net/browse/JDK-8061621
JPLISAgent.c 第 873 行可能是生成消息的原因。
更新:
我遍历了所有 CI 日志,以确定导致此问题的提交。在基于Jackson的Json格式化程序实用程序的单元测试中将其跟踪到此代码。
// try with a circular dependencies
Node a = new Node("a");
Node b = new Node("b");
a.setChild(b);
b.setParent(a);
assertThatExceptionOfType(JsonUtilsException.class).isThrownBy(() -> JsonUtils.toJson(a));
特别是循环依赖关系会触发 JVM 输出。我猜Jackson真的被循环依赖关系绊倒了,但我不明白为什么这会导致JVM断言错误。
问题: - 此警告/错误的含义是什么?- 此错误的典型原因是什么,JVM中的断言失败?