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

Rob*_*tts 5 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

mko*_*bit 6

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

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

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

此示例为每个配置解析规则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")
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

Gradle 用户指南还有一个仅更改版本的示例,以及一个与上面的代码片段(以及您的用例)非常相似的示例。