Неправильные версии спецификации JUnit Gradle 5 и Spring Boot - PullRequest
0 голосов
/ 08 февраля 2019

Я использую спецификацию Gradle 5 (спецификация) функция .Вот как я описываю это для моих зависимостей 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")

Я предполагаю, что предоставление спецификации разрешит версии зависимостей до 5.4.0.Однако они разрешаются до 5.1.1.Я не уверен почему.(Я также прошу enforcedPlatform() заблокировать указанную версию)

enter image description here

Проверка Спецификация JUnit 5 мы видим, что все org.junit.jupiter зависимости перечислены с версией 5.4.0 (в проекте разрешено до 5.1.1), а все org.junit.platform перечислены с версией 1.4.0, которые правильно разрешены в проекте.

Я не уверен, чтоЯ скучаю и надеялся получить помощь здесь.Спасибо!

РЕДАКТИРОВАТЬ:

Я использовал ответ Sormuras и переместил все спецификации в верхнюю часть блока dependencies {}, но все еще не получал версию 5.4.0.Затем я подозревал, что это может быть связано с плагином Gradle Spring Dependency Management , который я использую, поэтому, когда я закомментировал его, я получил версию JUnit 5.4.0.Как отключить JUnit из плагина управления зависимостями Gradle Spring?

Gradle Spring Dependency Management plugin

В завершение:

Iрешил использовать Spring Boot Dependencies BOM напрямую и удалить плагин Gradle:

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

Я думаю, плагин был создан для этих версий Gradle до Gradle 5где вы не могли использовать файл спецификации.Теперь с поддержкой спецификации я могу напрямую включить ее.Таким образом, моя версия JUnit такая, как я указал ее в блоке enforcedPlatform().

Я принял ответ Сэма Браннена ниже, потому что он хорошо объясняет, как возникает проблема и что ее решает, и я думаю, что она актуальна для тех, ктокто использует более старые версии Gradle.

Ответы [ 3 ]

0 голосов
/ 08 февраля 2019

Не забудьте включить спецификацию JUnit перед другими спецификациями, которые также относятся к JUnit.Первая спецификация выигрывает и блокирует версию всех последующих артефактов.

См. Эту проблему для аналогичной настройки с использованием Maven и Spring Boot: https://github.com/sormuras/junit-platform-maven-plugin/issues/29#issuecomment-456958188

0 голосов
/ 09 февраля 2019

Как отключить JUnit из плагина управления зависимостями Gradle Spring?

Для начала, если вы используете плагин управления зависимостями из Spring, вам не следует импортировать junit-bom, поскольку это приводит к дублированию (и потенциально конфликту) управления этими зависимостями.

Кроме того, всякий раз, когда вы используете плагин управления зависимостями из Spring и хотите переопределить управляемую версию, вы должны сделать это с помощьюпереопределяя точное имя версии, определенной в спецификации, используемой плагином.

Это задокументировано в Spring Boot для Gradle и для Maven .

Для Spring Boot название версии JUnit Jupiter - "junit-jupiter.version".Вы можете найти имена всех управляемых версий Spring Boot 2.1.2 здесь .

Итак, в Gradle вы можете переопределить его следующим образом.

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

Вы можете видеть, что я сделал именно это здесь: https://github.com/sbrannen/spring-events/blob/master/build.gradle#L38

С Maven вы можете переопределить его следующим образом.

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

Дополнительная справочная информация здесь: https://docs.spring.io/platform/docs/current/reference/html/getting-started-overriding-versions.html

0 голосов
/ 08 февраля 2019

JUnit 5.4.0 упростила свои артефакты и теперь доставила один артефакт для Юпитера - org.junit:junit-jupiter.То есть вы должны упростить свой файл Gradle:

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