Перейдите к лучшему примеру здесь для Gradle и Maven
Проблема
Довольно много зависимостей Java приводят Junit 4 или движок Junit vintage/| в качестве транзитивной зависимости.
А также движок Junit vintage/|предназначен для интеграции версий 4 и 5 , это позволяет использовать и то, и другое одновременно. Когда вы хотите окончательно мигрировать, это приводит к таким проблемам, как:
- Проблемы во время выполнения: класс junit4 не найден
- Тест выполнен, но покрытие не агрегировано
- Использование не кратких аннотаций
Решение
Все эти проблемы имеют только одно правильное решение:
Используйте одну конкретную версию Junit для предотвращения введения в заблуждение и неправильного использования
Здесь я сосредоточусь на использовании последней версии Junit 5, следовательно, исключая Junit 4.
Один из вариантов – игнорировать эту зависимость от определенной зависимости:
testImplementation('org.springframework.boot:spring-boot-starter-test') {
exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
}
org.springframework.boot spring-boot-starter-test test org.junit.vintage junit-vintage-engine
Но , это требует, чтобы вы знали какая зависимость приносит вам неприятную зависимость. В этом случае вы можете использовать эту команду для отслеживания:
./gradlew dependencyInsight --dependency "junit:junit" --configuration "testCompileClasspath"
Другой вариант – исключить ненужные зависимости из всех конфигураций . Это приводит к другим проблемам, таким как: для некоторых библиотек все еще требуется Junit4/vintage. Но ошибки отражения компиляции/времени выполнения на самом деле только делают эти зависимости визуальными и помогают явно отметить | те модули Java, которые по-прежнему требуют по какой-либо причине работы с устаревшей библиотекой.
Сортировка:
Наличие конфигураций в градуировке легко исключить зависимость в одном конкретном месте:
/* for all the configurations */
configurations {
all {
/* only junit 5 should be used */
exclude group: 'junit', module: 'junit'
exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
}
}
/* for a particular test module */
configurations {
testCompile {
/* only junit 5 should be used */
exclude group: 'junit', module: 'junit'
exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
}
testRuntime {
/* only junit 5 should be used */
exclude group: 'junit', module: 'junit'
exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
}
}
И не забудьте оставить комментарий на будущее!
Возобновиться
Надеюсь, эта заметка помогла игнорировать неприятную зависимость и сохранить контроль над конфигурацией сборки.
Оригинал: “https://dev.to/art_ptushkin/how-to-properly-ignore-junit-4-in-gradle-and-maven-3o82”