首页 > 解决方案 > Maven依赖管理中的“群压”

问题描述

我在使用 Maven 时遇到问题,在我的项目A 的com.google.guava多层传递依赖项中,该库被引用了大约六次。几乎所有这些依赖项都需要旧版本。18.0

我已经编写了另一个在项目A中使用的依赖项B。这种依赖直接依赖于 的版本,但 Maven 仍然会选择更新的版本。28.0com.google.guava18.0

除非我根据B在所有项目中明确包含较新版本,否则由于NoMethodErrors 等,该库将无法正常工作。如果我这样做,我可能会因为依赖项的新二进制不兼容版本而遇到所有其他库的问题。

实际上,我正承受着使用旧版本依赖项的群体压力,因为其他人都在这样做

为什么 Maven 不选择最新版本呢?我能做些什么来说服 Maven 在所有项目中根据B使用较新的版本?

有没有办法在我的依赖项使用时分离关注点并让所有其他依赖项实际使用?18.028.0

如果只是稍微大一点的包大小是为跨项目支付更多现代库的奖励......

也许有可能为我的库B硬链接某个依赖版本,所以只有我的库使用较新的版本?

标签: javamavendependency-management

解决方案


在 Maven 中,您可以使用<dependencyManagement>

使用此标签,您可以明确告诉 maven 您希望项目使用哪些版本的依赖项。

对于番石榴,您可以执行以下操作:

<dependencyManagement>
    <dependencies>

        <dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
            <version>28.0</version>
        </dependency>

    ...
    </dependencies>
</dependencyManagement>

然后你可以做一些事情,比如:

    <dependencies>

        <dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
        </dependency>

    ...
    </dependencies>

这将迫使 maven 使用 guava 18 依赖项


推荐阅读