【问题标题】:Transitive Dependency Version Management传递依赖版本管理
【发布时间】:2022-01-06 21:21:27
【问题描述】:

我有一个 maven 项目,其中一些依赖项写在 pom 文件中。对于那些直接依赖,我们有很多传递依赖。这些传递依赖的版本存在一些安全问题。那么有什么方法可以改变那些传递依赖的版本吗?

【问题讨论】:

  • 使用更新的版本将它们添加到您自己的 pom 文件中,或者更好地升级这些直接依赖项......

标签: java maven dependencies transitive-dependency


【解决方案1】:

解决方案 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 时,您最终可能会使用 B 2.4 运行 A 1.3(因为您仍然会覆盖它)并在运行时收到 NoSuchMethodError。


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

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

【讨论】:

    猜你喜欢
    • 2016-11-30
    • 2019-04-07
    • 2015-04-03
    • 2021-01-04
    • 2013-01-24
    • 1970-01-01
    • 2021-07-11
    • 2015-10-17
    相关资源
    最近更新 更多