Вопрос или проблема
Я мигрировал свой проект Maven с Junit4 на Junit5 и удалил эту строку:
<junitVersion>4.9</junitVersion>
из моего файла pom.xml.
Но, тем не менее, я все еще могу использовать это
import org.junit.Test;
в своем коде, мне хотелось бы узнать, какая из моих библиотек привела Junit4 как транзитивную зависимость.
Я использовал mvn dependency:tree
, вот что у меня есть, и я не вижу Junit4 нигде:
[INFO] +- org.springframework.boot:spring-boot-starter-test:jar:2.7.16:test
[INFO] | +- org.springframework.boot:spring-boot-test:jar:2.7.16:test
[INFO] | +- org.springframework.boot:spring-boot-test-autoconfigure:jar:2.7.16:test
[INFO] | +- org.junit.jupiter:junit-jupiter:jar:5.8.2:test
[INFO] | | \- org.junit.jupiter:junit-jupiter-params:jar:5.8.2:test
[INFO] | +- org.mockito:mockito-junit-jupiter:jar:4.5.1:test
[INFO] | +- org.skyscreamer:jsonassert:jar:1.5.1:test
[INFO] | | \- com.vaadin.external.google:android-json:jar:0.0.20131108.vaadin1:test
[INFO] | \- org.xmlunit:xmlunit-core:jar:2.9.1:test
[INFO] +- org.springframework:spring-test:jar:5.3.30:compile
[INFO] | \- org.springframework:spring-core:jar:5.3.30:compile
[INFO] | \- org.springframework:spring-jcl:jar:5.3.30:compile
[INFO] +- org.projectlombok:lombok:jar:1.18.30:compile
[INFO] +- org.apache.commons:commons-lang3:jar:3.12.0:compile
[INFO] +- org.apache.commons:commons-collections4:jar:4.4:compile
[INFO] +- org.junit.platform:junit-platform-launcher:jar:1.2.0:compile
[INFO] | +- org.apiguardian:apiguardian-api:jar:1.0.0:compile
[INFO] | \- org.junit.platform:junit-platform-engine:jar:1.8.2:compile (версия управляется из 1.2.0)
[INFO] | +- org.opentest4j:opentest4j:jar:1.2.0:compile
[INFO] | \- org.junit.platform:junit-platform-commons:jar:1.8.2:compile
[INFO] +- org.junit.jupiter:junit-jupiter-engine:jar:5.8.2:test
[INFO] | \- org.junit.jupiter:junit-jupiter-api:jar:5.8.2:test
Буду признателен за любые идеи!
Ответ или решение
Чтобы определить, откуда в вашем проекте Maven была импортирована зависимость JUnit 4, следуйте указанным ниже шагам. Хотя в вашем выводе mvn dependency:tree
не видно JUnit 4, это не означает, что он отсутствует. JUnit 4 может быть частью другой библиотеки, которая подключается как транзитивная зависимость.
1. Проверка зависимостей
Во-первых, необходимо выполнить команду для анализа зависимостей вашего проекта:
mvn dependency:tree -Dverbose -Dincludes=junit
Флаг -Dverbose
добавит дополнительные сведения, которые помогут понять, почему зависимость была добавлена, а -Dincludes=junit
отфильтрует вывод, чтобы показать только зависимости, связанные с JUnit.
2. Использование dependency:analyze
Также вы можете воспользоваться плагином dependency:analyze
, который поможет выявить зависимости, которые используются, но не определены в pom.xml
:
mvn dependency:analyze
Этот шаг может помочь в выявлении и других зависимостей, о которых вы не знали.
3. Проверка библиотеки, которая вызывает JUnit 4
Если вы всё еще не смогли найти JUnit 4, убедитесь, что вы ищете не только непосредственно JUnit, но и пакет, который может его включать. Например, библиотеки, такие как spring-boot-starter-test
, могут импортировать более ранние версии JUnit в зависимости от их конфигурации.
4. Проверка библиотек
Из вашего вывода mvn dependency:tree
видно, что вы используете следующие ключевые зависимости:
org.springframework.boot:spring-boot-starter-test:jar:2.7.16:test
- Потенциально некоторые другие библиотеки, такие как
mockito-junit-jupiter
, могут также включать более ранние версии тестовых фреймворков.
Обязательно проверьте их документацию для подтверждения, какие зависимости и версии JUnit они могут использовать.
5. Очистка кэша и повторная установка
Иногда кэшированные артефакты могут сохранять старые зависимости. Чтобы отвязать любые устаревшие версии, выполните следующую команду:
mvn clean install -U
Ваш проект будет очищен и сборка будет обновлена с последними версиями зависимостей.
6. Использование mvn dependency:tree
для всех модулей
Если ваш проект является многомодульным, выполните команду mvn dependency:tree
в корневом каталоге и добавьте флаг -Dverbose
, чтобы просмотреть деревья зависимостей для всех модулей.
mvn dependency:tree -Dverbose
Заключение
Следуя этим шагам, вы сможете более точно выяснить, откуда в вашем проекте была импортирована JUnit 4 и устранить эту зависимость, если она не нужна. Это поможет гарантировать, что ваш проект полностью использует JUnit 5, и нет конфликта между версиями. Не забывайте регулярно проверять зависимости в вашем проекте, чтобы избежать подобных ситуаций в будущем.