2017-10-19 35 views
2

Après avoir ajouté org.junit.platform.gradle.plugin dans la construction et la migration de tout depuis junit4 Gradle a commencé à rompre avec l'erreur ci-dessous.JUnit5 Gradle plugin le nom de fichier ou l'extension est trop long

Tout va bien avec le coureur d'époque, mais les tests junit5 ne le sont pas.

* 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 

Ai-je besoin de configurer le consommateur test junit5 en quelque sorte à faire face à ce genre de choses? ou peut-être y a-t-il un pot uber qui s'occupe de ça?


EDIT1

Je soupçonne que cela pourrait être le classpath, im va générer un uberjar avec tous les modules JUnit.


EDIT2

En regardant dans le code source semble comme plug-in Junit ajoute des charges au classpath

// 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 

Im curieux de savoir si je pouvais effacer cette configuration junitPlatform après que le projet évalue en toutes les dépendances JUnit sont ajoutées de toute façon pour que le code compile, alors le plugin ajoute juste des charges en haut. Et j'ai créé un projet qui enveloppe toutes les bibliothèques Junit5 à l'intérieur d'un artefact.


EDIT3

J'ai réussi à emballer tous les objets jupiter en 1 pour rétrécir le cp un peu, mais toujours mon classpath passe au-dessus 35k qui est un peu bizarre

Comment Est-ce que gradle lance les tests de junit5 alors? semble mettre tous les transitifs de tous les autres projets liés, et ajoute le cp, qui freine alors avec erreur = 206

Répondre

2

J'ai réussi à faire tout cela avec le code ci-dessous.

il va produire un jar avec un manifeste et mettre ce jar sur le classpath.

Il n'utilise aucun plugin qui exécute simplement la plate-forme en tant que tâche javaExec.

Ce fichier doit être appliqué au projet sur lequel vous souhaitez exécuter votre test.

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 

} 

Vous pouvez maintenant utiliser ce plugin qui fait ce qui précède, il suffit d'appliquer au projet avec trop longtemps classpath.

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