【发布时间】:2021-07-14 13:22:34
【问题描述】:
我使用 GWT 2.9 和 JUnit 4,但我正在考虑使用 junit-vintage-engine 达到 5。
但是,gwt 2.9 对 ASM 7 有要求,但对于 Junit 4,这不是问题。所以我尝试将我的 jUnit 依赖项更改为
<groupId>org.junit.vintage</groupId
<artifactId>junit-vintage-engine</artifactId>
<version>5.7.1</version>
现在,尝试在 Intellij 中启动 Jetty 后,我得到:
Java.lang.RuntimeException:从 jar 文件扫描条目 module-info.class 时出错:junit-vintage-engine-5.7.1.jar 原因:java.lang.UnsupportedOperationException:此功能需要 ASM6
我看不出 junit 年份在哪里依赖 ASM6,所以我不确定出了什么问题。我有办法解决这个问题吗?指针表示赞赏。
【问题讨论】:
-
这并不是说 junit vintage 有依赖做 ASM6。它说 junit vintage 有一个 module-info.class 条目,一些其他代码试图使用 ASM 解析。其他代码不依赖于 ASM6,但正在尝试使用较旧的 API。
-
我明白这一点,但是当我在我的 maven 中安装 junit 4 时它可以工作,当我有老式引擎时,它会停止工作。这是同一个码头服务器,所以我不明白
-
最可能的原因是junit 4 没有
module-info.class条目,其他代码可能会绊倒。 -
啊,好的。我只是不明白为什么当我在路径上有 ASM7 时它需要 ASM6
-
我在this answer中解释过; ASM 类的一些构造函数需要一个常量来说明子类是针对哪个 ASM 版本开发的,以发现有关新功能的兼容性问题。这正是这里发现的,使用 ASM 库的代码是使用比 ASM6 更早的版本开发的(或此后未更新),因此不理解 Java 模块,但会尝试解析模块信息。因此,您必须将使用 ASM 的库更新到能够理解模块的新版本(并告诉 ASM 它知道)。
标签: junit gwt junit5 java-bytecode-asm