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

5
我正在处理一个使用了存在安全漏洞的库的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个回答

6
您可以在构建文件中明确声明对org.secure.dependency:dependency:1.1的依赖,例如:implementation("org.secure.dependency:dependency:1.1")。您指定的依赖版本将优先于传递依赖项。
另一个选项可能是指定一个exclude规则,以确保不引入该依赖项(请参见示例)。
我认为最好的做法是使用用户指南中提供的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用户指南还提供了一个示例,其中仅更改版本,以及一个非常类似于上面代码片段(和您的用例)的示例。请参见此处此处

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接