2017-08-18 1 views
0

J'ai actuellement ce problème étrange avec la construction gradle. Voici les détails.Gradle compileTestJava échoue lors de la construction propre gradle

I ont actuellement un projet module multipuce gradle basé amorçage java-élastique dans la structure suivante

RootProjectDir 
     SubProjectA 
     SubProjectB 
     SubProjectCommon 

Le fichier build.gradle de chacun des projets est comme ci-dessous

construire RootProjectDir. gradle

dependencies { 
compile project(":SubProjectA") 
compile project(":SubProjectB") 
compile project(":SubProjectCommon") 
testCompile('org.springframework.boot:spring-boot-starter-test') 
} 

SubProjectA build.gradle

dependencies { 
compile project(":SubProjectCommon") 

} 

SubProjectB build.gradle

dependencies { 
compile project(":SubProjectCommon") 

} 

SubProjectCommon build.gradle

dependencies { 
compile('org.springframework.boot:spring-boot-starter-actuator') 
compile('org.springframework.boot:spring-boot-starter-jdbc') 
compile('org.springframework.boot:spring-boot-starter-web') 
..... 
..... 
} 

Quand je l'execute

gradle construction propre

la construction échoue au cours de la compileTestJava phase SubProjectA. Les tests SubProjectA ont une dépendance de temps de compilation sur les classes de SubProjectCommon.

Si je viens exécutez la commande suivante

gradle: subProjectA compileTestJava

la construction réussit à nouveau.

Il échoue avec le message indiquant que les classes SubProjectCommon n'ont pas pu être résolues. La chose étrange est que dans l'IntelliJ IDEA il ne montre aucun problème de compilation pour les classes de test SubProjectA et le test s'exécute correctement. Aussi, quand je viens exécuter le

gradle essai propre

tout fonctionne bien.

J'ai même essayé de mettre une dépendance testCompile sur SubProjectCommon dans le build.gradle SubProjectA comme celui-ci

build SubProjectA.gradle

dependencies { 
    compile project(":SubProjectCommon") 
    testCompile project(":SubProjectCommon") 

    } 

mais ne fonctionne toujours pas

PS: -I cas de test ont actuellement écrit que pour les classes SubProjectA.

+0

J'ai un problème similaire avec Gradle 4.1 et Spring Boot 1.5.4 –

Répondre

1

Les IDE n'honorent pas très bien les chemins d'accès aux modules, en particulier Eclipse, donc tout est généralement inclus ensemble, donc vous n'obtenez aucun problème de chemin. Gradle fait des distinctions propres entre différents projets.

Donc, si vos classes étaient dans le dossier de test, vous devrez peut-être référencer les jeux de tests en utilisant correctement le ci-dessous:

testCompile project(":SubProjectCommon").sourceSets.test.output 

ou

compile project(":SubProjectCommon").sourceSets.test.output 

selon le sourceSet utilise les classes de l'autre projet.