2017-09-29 104 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這是非常類似上面的代碼(和你用例)。