2017-09-29 171 views
2

我正在使用一个Java项目,该项目正在使用一个依赖库存在安全漏洞的库。不幸的是,易受攻击的库的更新版本没有相同的组。基本上,库org.reallyuseful.library:usefulstuff:1.0取决于org.vulnerable.dependency:dependency:1.0,但该漏洞已在org.secure.dependency:dependency:1.1中修复。如何替换gradle中依赖项的依赖关系?

在Gradle中,如何告知usefulstuff:1.0使用org.secure.dependency:dependency:1.1而不是org.vulnerable.dependency:dependency: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") 
    } 
    } 
} 

的摇篮用户指南也有一个example,其中仅版本发生变化,并且example这是非常类似上面的代码(和你用例)。