82 votes

Dépendance de test de Gradle

J'ai deux projets, le projet A et le projet B. Les deux sont écrits en groovy et utilisent gradle comme système de construction.

Le projet A nécessite le projet B. Ceci est valable pour le code de compilation et le code de test.

Comment puis-je configurer pour que les classes de test du projet A aient accès aux classes de test du projet B?

108voto

David Resnick Points 2010

Vous pouvez exposer les classes de test via une configuration 'tests', puis définir une dépendance testCompile sur cette configuration.

J'ai ce bloc pour tous les projets Java, qui jars tout le code de test:

 task testJar(type: Jar, dependsOn: testClasses) {
    baseName = "test-${project.archivesBaseName}"
    from sourceSets.test.output
}

configurations {
    tests
}

artifacts {
    tests testJar
}
 

Ensuite, lorsque j'ai le code de test auquel je souhaite accéder entre les projets que j'utilise

 dependencies {
    testCompile project(path: ':aProject', configuration: 'tests')
}
 

Ceci est pour Java; Je suppose que cela devrait aussi fonctionner pour groovy.

8voto

Michail Nikolaev Points 1870

Cela fonctionne pour moi (Java)

 // use test classes from spring-common as dependency to tests of current module
testCompile files(this.project(':spring-common').sourceSets.test.output)
testCompile files(this.project(':spring-common').sourceSets.test.runtimeClasspath)

// filter dublicated dependency for IDEA export
def isClassesDependency(module) {
     (module instanceof org.gradle.plugins.ide.idea.model.ModuleLibrary) && module.classes.iterator()[0].url.toString().contains(rootProject.name)
}

idea {
      module {
          iml.whenMerged { module ->
              module.dependencies.removeAll(module.dependencies.grep{isClassesDependency(it)})
              module.dependencies*.exported = true
          }
      }
  }
.....  
// and somewhere to include test classes 
testRuntime project(":spring-common")
 

5voto

pokkie Points 63

La solution ci-dessus fonctionne, mais pas pour la dernière version 1.0-rc3 de Gradle.

      task testJar(type: Jar, dependsOn: testClasses) {
       baseName = "test-${project.archivesBaseName}"

       // in the latest version of Gradle 1.0-rc3
       // sourceSets.test.classes no longer works
       // It has been replaced with 
       // sourceSets.test.output

       from sourceSets.test.output
     }
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X