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 que les classes de test du projet A ont accès aux classes de test du projet B?
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 jar tout le code de test:
task testJar(type: Jar, dependsOn: testClasses) {
baseName = "test-${project.archivesBaseName}"
from sourceSets.test.output
}
configurations {
tests
}
artifacts {
tests testJar
}
Puis, quand j'ai le code de test auquel je veux 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.
C'est une solution plus simple qui ne nécessite pas de fichier jar intermédiaire:
dependencies {
...
testCompile project(':aProject').sourceSets.test.output
}
Il y a plus de discussion dans cette question: Dépendances de test multi-projets avec gradle
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")
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
}
Pour Android sur la dernière version de Gradle (je suis actuellement sur la version 2.14.1), il vous suffit d’ajouter ce qui suit dans le projet B pour obtenir toutes les dépendances de test du projet A.
dependencies {
androidTestComplie project(path: ':ProjectA')
}
Si ProjectA contient le code de test que vous souhaitez utiliser dans ProjectB et que ProjectB souhaite utiliser artefacts pour l'inclure, alors le fichier build.gradle de ProjectB ressemblerait à ceci:
dependencies {
testCompile("com.example:projecta:1.0.0-SNAPSHOT:tests")
}
Ensuite, vous devez ajouter une commande archives
à la section artifacts
dans le fichier build.gradle de ProjectA:
task testsJar(type: Jar, dependsOn: testClasses) {
classifier = 'tests'
from sourceSets.test.output
}
configurations {
tests
}
artifacts {
tests testsJar
archives testsJar
}
jar.finalizedBy(testsJar)
Désormais, lorsque les artefacts de ProjectA sont publiés sur votre artefact, ils incluent un -tests jar. Ce -tests jar peut ensuite être ajouté en tant que dépendance testCompile pour ProjectB (comme indiqué ci-dessus).
Pour Gradle 1.5
task testJar(type: Jar, dependsOn: testClasses) {
from sourceSets.test.Java
classifier "tests"
}