Почему Maven не исключает тестовую зависимость, даже если она исключена?

#maven #junit #maven-enforcer-plugin

Вопрос:

У меня есть следующее…

 <dependency>
        <groupId>com.github.stefanbirkner</groupId>
        <artifactId>system-rules</artifactId>
        <version>[1.19.0,)</version>
        <scope>test</scope>
        <exclusions>
            <exclusion>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
            </exclusion>
        </exclusions>
</dependency>
<dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.13.2</version>
        <scope>test</scope>
</dependency>
 

Но когда я бегу mvn clean package , я получаю…

 Dependency convergence error for junit:junit:4.11 paths to dependency are:
 -my.pkg:project:0.0.3-SNAPSHOT
   -com.github.stefanbirkner:system-rules:1.19.0
     -junit:junit:4.11
and
 -my.pkg:project:0.0.3-SNAPSHOT
   -junit:junit:4.13.2
 

Почему он не игнорирует dep?

Комментарии:

1. Я согласен с ответом «использовать управление зависимостями». Что касается того, почему вышеперечисленное не сработало, вы побежали mvn dependency:tree изучать переходные зависимости? Возможно, вам также нужно исключить junit-dep.

2. @Barchetta Уже сделал это, плагин enforcer конкретно указывает, откуда он берется. У других переходных зависимостей не было такой же проблемы.

Ответ №1:

Реальный способ «исправить» ошибку сходимости зависимостей-использовать <dependencyManagement> .

Поместите запись

 <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.13.2</version>
                <scope>test</scope>
            </dependency>
        </dependencies>
</dependencyManagement>

 

в ПОМ. Это установит версию для всех переходных зависимостей. Больше не нужны исключения.

Комментарии:

1. Спасибо, я попробую сделать это таким образом