java - 如何替换 gradle 中依赖项的依赖项?

标签 java gradle

我正在处理一个 Java 项目,该项目使用的库依赖于存在安全漏洞的库。不幸的是,漏洞库的更新版本没有相同的组。基本上,库 org.reallyuseful.library:usefulstuff:1.0 依赖于 org.vulnerable.dependency:dependency:1.0,但该漏洞已在 org 中修复.secure.dependency:dependency:1.1.

在 Gradle 中,我如何告诉 usefulstuff:1.0 使用 org.secure.dependency:dependency:1.1 而不是 org.vulnerable.dependency:dependency :1.0?

最佳答案

您可以显式声明对 org.secure.dependency:dependency:1.1 的依赖,例如 implementation("org.secure.dependency:dependency:1.1")构建文件。您指定的依赖版本将优先于传递依赖。

另一种选择可能是指定 exclude 规则以确保不引入依赖项(参见 example )

我认为最好的模式是我们使用 Dependency Management 提供的工具用户指南的一部分。在这种情况下,您应该能够使用 resolutionStrategy API。您可以用所需的依赖项替换最初请求的依赖项。

本例为每个Configuration配置解析规则:

configurations.all {
  resolutionStrategy.eachDependency { DependencyResolveDetails details ->
    if (details.requested.group == "org.vulnerable.dependency"
        && details.requested.name == "dependency"
        && details.requested.version == "1.0") {
      details.useTarget("org.secure.dependency:dependency:1.1")
    }
  }
}

Gradle 用户指南还有一个 example只有版本发生了变化,example这与上面的代码片段(和您的用例)非常相似。

关于java - 如何替换 gradle 中依赖项的依赖项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46495539/

相关文章:

Java 线程概念 : Output Explanation

java - 将 char 变量乘以 int

file - 如何在 Gradle 自定义任务中初始化 FileTree 字段?

java - ContentResolver.requestSync 不调用 SyncAdapter

java - 使用 Wicket 进行 URL 分解

eclipse - Gaelyk Eclipse配置错误

java - Libgdx 如何添加 FreeType 扩展?

gradle - 在 gradle kotlin dsl 上使用节点插件时无法解析配置 ':_:detachedConfiguration1' 的所有文件

Gradle 发布到 artifactory 的方式

java - 无限二维数组搜索