簡體   English   中英

gradle包含傳遞運行時依賴性作為編譯依賴性

[英]gradle includes transitive runtime dependency as compile dependency

我在gradle依賴管理中表達了一個奇怪的行為,其中項目A將項目B作為編譯依賴項引用,項目B將庫C作為運行時依賴項引用。 現在我可以在項目A中使用庫C中的類。

我的問題:( 為什么)這是一個錯誤還是一個功能?

可以使用gradle 2.9和2.10以及以下最小設置重現該問題:

// settings.gradle
include ':A', ':B'
// build.gradle
allprojects {
    apply plugin: 'java'
    apply plugin: 'maven'

    repositories {
        mavenLocal()
        mavenCentral()
    }
}

project(':A') {
    dependencies {
        compile project(':B')
    }
}

project(':B') {
    dependencies {
        runtime "org.slf4j:slf4j-log4j12:1.7.13"
    }
}

如您所見,gradle :A:dependencies顯示

[...]

compile - Compile classpath for source set 'main'.
\--- project :B
     \--- org.slf4j:slf4j-log4j12:1.7.13
          +--- org.slf4j:slf4j-api:1.7.13
          \--- log4j:log4j:1.2.17
[...]

並且在駐留在項目A中的java代碼中完全可以使用log4j。

看到這個問答。 如果未指定配置,Gradle將選擇從runtime擴展的default配置。 快速解決方法是使用

compile project(path: ":B", configuration: "compile")

在Android庫(aar)傳遞運行時依賴性的情況下,這從Gradle 5.0開始修復。

暫無
暫無

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

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