【问题标题】:How can i work around this ASM issue with JUnit 5我如何使用 JUnit 5 解决这个 ASM 问题
【发布时间】: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


【解决方案1】:

免责声明:我之前从未使用过 Jetty 或 GWT,只是环顾了一下,因为我对您的问题感到好奇。

GWT-Dev 2.9.0 有一个Jetty 9.2.14 dependency

根据this source,在尝试扫描多版本 JAR 中的模块信息类以获取注释时,升级到 Jetty 9.4.8+ 似乎有助于解决 JDK 9+ 问题:

查看parent POM时,...

<properties>
  <jetty.version>9.2.14.v20151106</jetty.version>
  <asm.version>7.1</asm.version>
</properties>

...也许只需覆盖 POM 中的 jetty.version 属性就足够了。如果这还不够,您仍然可以尝试将 Jetty 工件依赖管理为 9.4.40.v20210413、10.0.2、11.0.2 或任何您认为合适且与 GWT 兼容的 API。

【讨论】:

  • 我会很感激这里的一些反馈。谢谢。
猜你喜欢
  • 2022-06-14
  • 2015-12-11
  • 2015-12-29
  • 2019-10-14
  • 2020-03-25
  • 2020-02-14
  • 2020-07-30
相关资源
最近更新 更多