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

时间:2017-09-29 19:12:47

标签: 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

1 个答案:

答案 0 :(得分:2)

您可以在构建文件中明确声明对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与上述代码段(以及您的用例)非常相似。