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

时间:2017-10-19 09:54:48

标签: java windows gradle junit junit5

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

所有老式跑步者都运行良好,但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测试用户来处理这类事情?或者也许有一些超级罐处理那些?

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

我确实设法将所有木星文物打包成1来缩小cp,但我的类路径仍超过35k这有点奇怪

gradle如何运行junit5测试呢?似乎它将所有其他项目的所有传递都相关联,然后将它们添加到cp中,然后使用error = 206进行制动

1 个答案:

答案 0 :(得分:2)

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!