JUnit5 Gradle 插件文件名或扩展名太长

JUnit5 Gradle plugin the filename or extension is too long

org.junit.platform.gradle.plugin 添加到构建中并从 junit4 迁移所有内容后 Gradle 开始出现以下错误。

所有 运行 都适用于 vintage 运行ner 但 junit5 测试不是。

* Exception is:
org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':server:junitPlatformTest'.

Caused by: org.gradle.process.internal.ExecException: A problem occurred starting process 'command 'C:\Program Files\Java\jdk1.8.0_131\bin\java.exe''
...
Caused by: java.io.IOException: CreateProcess error=206, The filename or extension is too long

我是否需要以某种方式配置 junit5 测试使用者来处理这类事情?或者也许有一些 uber jar 处理这些?


EDIT1

我怀疑这可能是类路径,我将生成一个包含所有 junit 模块的 uberjar。


EDIT2

查看源代码似乎是 Junit 插件向类路径添加负载

// Note: the user's test runtime classpath must come first; otherwise, code
// instrumented by Clover in JUnit's build will be shadowed by JARs pulled in
// via the junitPlatform configuration... leading to zero code coverage for
// the respective modules.
classpath = project.sourceSets.test.runtimeClasspath + project.configurations.junitPlatform

我很好奇我是否可以在项目评估后删除此配置 junitPlatform,因为无论如何添加所有 JUnit 依赖项以便代码编译,然后插件只是在顶部添加负载。我创建了一个将所有 Junit5 库包装在一个人工制品中的项目。


EDIT3

我确实设法将所有 jupiter 工件打包成 1 以稍微缩小 cp,但我的类路径仍然超过 35k,这有点奇怪

那么 gradle 运行 junit5 是如何测试的? 似乎它把所有其他相关项目的所有传递都放在一起,并将它们添加到 cp,这然后刹车错误=206

GRADLE 4.6 支持 JUNIT 5! 请记住,老式引擎现在需要与木星相同的版本 编辑:16/03/2018


我已经设法使用以下代码使其全部正常工作。

它将生成一个带有清单的 jar 并将该 jar 放在类路径中。

它没有使用任何插件,只是 运行将平台作为 javaExec 任务。

此文件需要应用于您要运行测试的项目。

def version = "5.0.1"
def platformVersion = "1.0.1"
def vintageVersion = "4.12.1"
def projectCp = "${project.name}Classpath.jar"

dependencies {

    compile "org.junit.jupiter:junit-jupiter-api:$version"
    compile "org.junit.platform:junit-platform-launcher:$platformVersion"
    compile "org.junit.platform:junit-platform-runner:$platformVersion"

    testCompile "junit:junit:4.12"

    testCompile "org.junit.jupiter:junit-jupiter-params:$version"

    testRuntime "org.junit.vintage:junit-vintage-engine:$vintageVersion"
    testRuntime "org.junit.platform:junit-platform-console:$platformVersion"
    testRuntime "org.junit.jupiter:junit-jupiter-engine:$version"
}

afterEvaluate {
    if (!project.tasks.findByName('packClasspath')) {
        task packClasspath(type: Jar) {
            archiveName = projectCp
            version = ''
            manifest {
                attributes 'Class-Path':
                project.configurations.testRuntime.collect { "file:///${it.absolutePath}" }.join(' ')}

            }
        }

        if (!project.tasks.findByName('jupiterTest')) {
            task jupiterTest(type: JavaExec) {
                jvmArgs '-ea'
                classpath = files(
                    "${project.buildDir}\libs\${projectCp}",
                    project.sourceSets.test.output,
                    project.sourceSets.main.output,
                )

                main 'org.junit.platform.console.ConsoleLauncher'
                args '--scan-class-path'
                args "--reports-dir=$project.testReportDir"
            }
        }

        test.dependsOn jupiterTest
        jupiterTest.dependsOn packClasspath
        jupiterTest.dependsOn testClasses

        test.enabled = false

}

或者,现在您可以使用这个插件来完成上述操作,只需将它应用到类路径太长的项目中即可。

https://github.com/viswaramamoorthy/gradle-util-plugins

编辑

GRADLE 4.6 支持 JUNIT 5!