传递依赖版本管理

Transitive Dependency Version Management

我有一个 Maven 项目,其中包含一些用 pom 文件编写的依赖项。对于那些直接依赖,我们有很多传递依赖。这些传递依赖的版本有一些安全问题。那么有什么办法可以更改那些传递依赖项的版本吗?

解决方案 1) 只需使用较新版本添加对该传递依赖的直接依赖。

如果项目 myProject 1.0 依赖于 A 1.2,而 A 1.2 依赖于 B 2.3,那么我的项目将在其类路径中包含以下 jar:myproject 1.0、A 1.2 和 B 2.3。

但如果 myProject 1.0 也依赖于 B 2.4,那么我的项目将在其类路径中包含以下 jar:myproject 1.0、A 1.2 和 B 2.4。它不会在类路径中包含 B 2.3,因为 Maven 检测到两个 B 使用相同的 groupId 和 artifactId,因此项目 pom 中定义的那个获胜。

试着了解那里发生了什么,运行 mvn dependency:tree -Dverbose

这种方法的缺点:当您升级到依赖于 B 2.5 的 A 1.3 时,您可能最终 运行将 A 1.3 与 B 2.4 结合使用(因为您仍然覆盖它)并在 运行时间.


解决方案 2) 使用平台 bom 为您计算出一组兼容的依赖版本,并为每个和所有 CVE 发布该 bom 的新版本。例如:Quarkus 或 Spring Boot boms.

这种方法的缺点:您需要的特定依赖项可能不在那里,使您回到解决方案 1)。