为什么Maven在添加新依赖项时会重新添加已存在的依赖项?

时间:2016-07-25 22:00:12

标签: java spring maven intellij-idea

在我正在进行的项目中,我的团队有以下pom文件:

UICollectionViewCell

我已经在Intellij提供的Maven工具栏中附加了Maven依赖项的屏幕截图,该工具栏来自此POM文件。Maven Dependencies in Intellij

请注意,只有在我们尝试添加spring-boot JPA依赖项时才会出现红色突出显示的部分。没有它,我们的项目工作正常。看起来Maven正在重新添加已添加的依赖项,这很奇怪,因为例如Hystrix与JPA没有任何关系。

任何人都知道如何解决这个问题?

3 个答案:

答案 0 :(得分:0)

Maven似乎可以传递地添加依赖项,因此您可以获得与相关版本相关的额外依赖项。

您可以尝试根据需要排除其他依赖项。 请参阅:Exclude all transitive dependencies of a single dependency

答案 1 :(得分:0)

要验证是否是再次拉入这些jar的jpa依赖项,可以在与pom.xml相同的目录中运行以下命令

mvn dependency:tree -Dverbose

这将显示依赖关系来源的输出,只搜索重复项。

您可以将排除标记添加到可能过渡到这些库中的任何内容,例如:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
    <exclusions>
            <exclusion>
                <groupId>*</groupId>
                <artifactId>*</artifactId>
        </exclusion>
    </exclusions>    
</dependency>

Maven 3.2.1开始,您可以使用通配符排除传递依赖项。

或者,如果您不想使用*外卡,请明确说明groupId和artifactId。

答案 2 :(得分:0)

它不是一个错误,它是一个警告。

有关重复依赖项的警告。

如果添加spring-boot-jpa依赖项,则间接添加其他spring-boot依赖项。但是如果严格添加spring-boot,则会忽略spring-boot-jpa的间接依赖关系,并且可能会因不兼容而解决。

请删除spring-boot以使用spring-boot-jpa树。