【问题标题】:Gradle Can't Find JUnit PlatformGradle 找不到 JUnit 平台
【发布时间】:2019-07-24 20:18:48
【问题描述】:

我最近升级到了 JUnit 5,我正在尝试通过 junit-jupiter-vintage 维护一个 JUnit 4 套件,使用几乎可以找到示例的任何地方提供的 EXACT INSTRUCTIONS。

注意,我使用的是离线构建,因为我必须这样做,所以虽然我可以下载我需要的任何 Jar,但我没有主动连接到任何 maven 存储库。

Gradle 版本是 4.9,-all.zip 分发,不是包 已安装但已解压缩并添加到 PATH 变量中(一点也不重要)。

apply plugin: 'java'

repositories{
  flatDir dirs: 'file:$rootDir/lib'
}
test{
  useJUnitPlatform()
}

dependencies{
  testImplementation 'org.junit.jupiter:junit-jupiter-api:5.5.0'
  testCompileOnly 'junit:junit:4.12'
  testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.5.0'
  testRuntimeOnly 'org.junit.vintage:junit-vintage-engine:5.5.1'
}

输出令人失望:

NoClassDefFoundError: org/junit/platform/engine/support/hierarchical/HierarchicalTestEngine

这些是在 JUnit Platform jars 中找到的文件,用作 JUnit 5 的启动引擎。Gradle 4.6 及更高版本应该原生支持该引擎,我可以在

中看到 jars
gradle-4.9/lib/plugins/
  ...
  junit-platform-commons-1.0.3.jar
  junit-platform-engine-1.0.3.jar
  junit-platform-launcher-1.0.3.jar
  ...

手动添加最新平台作为 testRuntimeOnly 依赖项似乎允许我的 JUnit 5 测试文件工作,但它无法检测到我的任何 JUnit4 测试。这也感觉像是一个明显的 hack,因为我可以找到的每个示例构建文件都不需要这样做。我希望如果我能解决 gradle 问题,我也会解决我的 JUnit4 问题。

为什么我的(离线)gradle build 无法找到 JUnit5 的主要测试运行器?

【问题讨论】:

  • 只看它;您正在混合使用不同的版本 5.5.9 和 5.5.1。最新的 Gradle 版本也是 5。你可能想从github.com/junit-team/junit5-samples/tree/master/…中的代码开始
  • @johanneslink 我已经弄清楚了,这不是版本不匹配,而是传递依赖。显然,Gradle 正在访问 Software Central,读取 POM 等。为了使其正常工作,我必须在构建路径中手动包含所有 JUNit 依赖项,因为我不在线

标签: java gradle junit junit4 junit5


【解决方案1】:

Gradle 正在尝试使用 Maven 存储库来解决传递依赖关系,并且由于此安装处于脱机状态,因此无法这样做。所有 JUnit 传递依赖项都需要在运行时类路径上,在这种情况下,这意味着手动包含它们。

我将使用 Maven 解决这个问题并将它们全部下载到这台联网的机器上,并将它创建的本地存储库移动到需要它的系统上。

【讨论】:

  • 我建议您描述一下您是如何做到这一点的,以获得更好的答案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-02-08
  • 2018-03-10
  • 1970-01-01
  • 2021-02-16
  • 1970-01-01
  • 2021-04-28
  • 2019-11-20
相关资源
最近更新 更多