在 Maven 中自动获取最新的传递依赖

Automatically taking the newest transitive dependency in maven

考虑一个非常常见的情况,当一个项目依赖于 2 个库,每个库都传递了不同版本的第三个库:

Project A:
    Library B:
        Library D: version 1
    Library C:
        Library D: version 2

我可以使用 maven enforcer plugin's dependencyConvergence rule 来检测此类问题,然后直接在我的项目 A 的 pom 中指定库 D 的版本,例如 部分。

但这又产生了另一个问题:现在我必须手动跟踪库 D 的版本,即使我的项目没有直接使用它。
每次更改库 B 或库 C 的版本时,我都必须记住在我的项目中也更新库 D 的版本。很容易忘记!

有没有办法告诉 maven 只使用最新版本的传递库?
类似于:

<dependencyManagement>
    ...
    <dependency>
        <groupId>path.to</groupId>
        <artifactId>library-D</artifactId>
        <version>
            <use_newest_one_from_all_transitive_dependencies_please/>
        </version>
    </dependency>

有办法实现吗?

不,正如khmarbaise所说,这是不可能的。

解析规则深深植根于 Maven 本身。您可以查看解析结果(正如您已经提到的),但不能更改它。

我们决定通过使用我们在 <dependencyManagement> 部分中 import 的适当 BOM(依赖管理列表)来修复几乎所有版本的传递依赖项。这保证了所有依赖项都来自最新版本。它不保证一切都适合。但是使用最新版本作为标准也不会这样做。

您可以只添加依赖项,然后按照建议自动管理它 here. This uses the Maven Versions Plugin。当然,它将采用最新版本,而不是最新的传递依赖版本。版本范围也是可能的,但不鼓励使用它们。