簡體   English   中英

Gradle不會按要求排除模塊

[英]Gradle won't exclude a module as requested

我無法使用“ exclude”在build.gradle文件中排除番石榴模塊。

使用此依賴關系塊:

dependencies {
    ...
    compile(group: 'com.google.api-client', name: 'google-api-client', version: '1.19.0') {
        exclude(group: 'com.google.guava', module: 'guava-jdk5') // !!! Doesn't work!!!
       ...
    }
...
}

我在下面得到了依賴樹。 請注意,不排除guava-jdk5。

+--- com.google.api-client:google-api-client:1.19.0
|    +--- com.google.oauth-client:google-oauth-client:1.19.0
|    |    +--- com.google.http-client:google-http-client:1.19.0
|    |    |    ...
|    |    \--- com.google.code.findbugs:jsr305:1.3.9
|    ...
|    \--- com.google.guava:guava-jdk5:13.0

...

請注意,最后一行仍包含guava模塊,尚未排除它。 為什么? 如何排除呢?

問題在於,另一個編譯對象還依賴於具有guava-jdk5作為傳遞依賴關系的第一級依賴關系,因此,該另一個對象正在引入不需要的模塊。

我終於能夠看到使用

./gradlew -q :app:dependencyInsight --dependency guava --configuration compile

並可以使用排除它

configurations {
    compile.exclude module: 'guava-jdk5'
}

問題作者的回答沒有幫助我,因為它太狹窄/具體。 這是一種修改的方法,適用於排除任何模塊:

  1. 使用“終端”中的此命令檢查當前識別的依賴項:

     gradlew app:dependencies 

該命令從項目的根目錄發出,此處的“ app”應替換為應用程序“模塊”的名稱。

您也可以在應用程序的文件夾內cd並啟動此程序:

..\gradlew -q dependencies

注意:在Linux上使用../gradle

您將看到存在幾種配置,而不僅僅是“編譯”(例如“ _debugCompile”等)。 每個“配置”都有自己的依賴性! 這就是為什么僅排除“編譯”配置中的內容可能不夠的原因。

  1. 現在,以這種方式將排除應用於所有“配置”:將此塊添加到應用程序的(“模塊”)gradle.build文件中(當然要包括要排除的模塊列表):

     configurations { all { exclude module: 'httpclient' exclude module: 'httpcore' } } 

    提示:例如,在此處討論了高級排除案例: https : //discuss.gradle.org/t/how-do-i-exclude-specific-transitive-dependencies-of-something-i-depend-on/17991/7

  2. 重復步驟1.和2.,直到在任何配置的依賴項列表中看不到要排除的模塊。

提示:在這里,您可以決定在“所有”塊中放置:

transitive = false

您將擺脫所有傳遞依賴。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM