как узнать, откуда была добавлена зависимость Junit4 в проекте Maven?

Вопрос или проблема

Я мигрировал свой проект 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, и нет конфликта между версиями. Не забывайте регулярно проверять зависимости в вашем проекте, чтобы избежать подобных ситуаций в будущем.

Оцените материал
Добавить комментарий

Капча загружается...