Gradle找不到JUnit平台

时间:2019-07-24 20:18:48

标签: java gradle junit junit4 junit5

我最近已升级到JUnit 5,并且我尝试使用在几乎所有可以找到示例的地方提供的EXACT INSTRUCTIONS通过junit-jupiter-vintage维护JUnit 4套件。

注意,我使用的是脱机版本,因为我必须这样做,因此尽管可以下载所需的任何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测试。这似乎也很明显,因为我可以找到的每个示例构建文件都不需要这样做。我希望,如果可以解决gradle问题,那么我也将解决JUnit4问题。

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

1 个答案:

答案 0 :(得分:0)

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

我将使用Maven来解决这个问题,并将其全部下载到这台连接互联网的计算机上,并将其创建的本地存储库移到需要它的系统上。