web-dev-qa-db-fra.com

Gradle 5 JUnit BOM et Spring Boot Versions incorrectes

J'utilise la nomenclature de Gradle 5 (nomenclature) fonctionnalité . Voici comment je le décris pour mes dépendances JUnit 5:

testImplementation(enforcedPlatform("org.junit:junit-bom:5.4.0")) // JUnit 5 BOM
testImplementation("org.junit.jupiter:junit-jupiter-api")
testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine")
testImplementation("org.junit.jupiter:junit-jupiter-params")

Mon hypothèse est que la fourniture de la nomenclature résoudra les versions des dépendances en 5.4.0. Cependant, ils sont résolus en 5.1.1. Je ne suis pas sûr pourquoi. (Je demande également à enforcedPlatform() de verrouiller la version spécifiée)

enter image description here

Inspection BOM de JUnit 5 nous voyons que toutes les dépendances org.junit.jupiter Sont listées avec la version 5.4.0 (Résolution en 5.1.1 dans le projet) et toutes org.junit.platform les dépendances sont répertoriées avec la version 1.4.0 qui se résolvent correctement dans le projet.

Je ne sais pas ce qui me manque et j'espérais obtenir de l'aide ici. Merci!

MODIFIER:

J'ai utilisé la réponse Sormuras et déplacé toutes les nomenclatures en haut du bloc dependencies {} Mais je n'obtenais toujours pas la version 5.4.0. Ensuite, je soupçonnais que cela provenait du plugin Gradle Spring Dependency Management que j'utilise, donc quand je l'ai commenté, j'ai obtenu la version JUnit 5.4.0. Comment désactiver JUnit provenant du plugin Gradle Spring Dependency Management?

Gradle Spring Dependency Management plugin

ENFIN:

J'ai décidé d'utiliser --- Spring Boot Dependencies BOM directement et de supprimer le plugin Gradle:

implementation(platform("org.springframework.boot:spring-boot-dependencies:2.0.5.RELEASE"))

J'imagine que le plugin a été créé pour ces versions de Gradle avant Gradle 5 où vous ne pouviez pas utiliser un fichier BOM. Maintenant, avec le support de nomenclature, je peux l'inclure directement. De cette façon, ma version de JUnit est telle que je l'ai spécifiée dans le bloc enforcedPlatform().

J'ai accepté la réponse de Sam Brannen ci-dessous car il explique bien comment le problème se produit et ce qui le résout et je pense que c'est pertinent pour ceux qui utilisent des versions plus anciennes de Gradle.

10
Stefan Zhelyazkov

Comment désactiver JUnit provenant du plugin Gradle Spring Dependency Management?

Pour commencer, si vous utilisez le plug-in de gestion des dépendances de Spring, vous ne devez pas importer le junit-bom car cela entraîne une gestion en double (et potentiellement conflictuelle) de ces dépendances.

En plus de cela, chaque fois que vous utilisez le plug-in de gestion des dépendances de Spring et que vous souhaitez remplacer une version gérée, vous devez le faire en remplaçant le nom exact de la version définie dans la nomenclature utilisée par le plug-in.

Ceci est documenté dans Spring Boot pour Gradle et pour Maven .

Pour Spring Boot, le nom de la version JUnit Jupiter est "junit-jupiter.version". Vous pouvez trouver les noms de toutes les versions gérées pour Spring Boot 2.1.2 ici .

Donc, dans Gradle, vous devez le remplacer comme suit.

ext['junit-jupiter.version'] = '5.4.0'.

Vous pouvez voir que j'ai fait exactement cela ici .

Avec Maven, vous le remplaceriez comme suit.

<properties>
    <junit-jupiter.version>5.4.0</junit-jupiter.version>
</properties>

Plus d'informations générales ici: https://docs.spring.io/platform/docs/current/reference/html/getting-started-overriding-versions.html

36
Sam Brannen

JUnit 5.4.0 a simplifié ses artefacts et a désormais fourni un seul artefact pour Jupiter - org.junit:junit-jupiter. C'est-à-dire, vous devez également simplifier votre fichier Gradle:

testImplementation(enforcedPlatform("org.junit:junit-bom:5.4.0")) // JUnit 5 BOM
testImplementation("org.junit.jupiter:junit-jupiter")
3
Mureinik

Assurez-vous d'inclure la nomenclature de JUnit avant les autres nomenclatures qui font également référence à JUnit. La première nomenclature gagne et verrouille la version de tous les artefacts ultérieurs.

Consultez ce problème pour une configuration similaire à l'aide de Maven et Spring Boot: https://github.com/sormuras/junit-platform-maven-plugin/issues/29#issuecomment-456958188

1
Sormuras