簡體   English   中英

Gradle:為什么我必須添加項目依賴所需的存儲庫?

[英]Gradle: Why do I have to add repository needed by project dependency?

假設我有兩個項目MainInfrastructure ,它們都是用 Gradle 4.10.3構建的。 Infrastructure在其依賴項中聲明SomeOtherDependency

repositories {
    // jcenter is needed for "SomeOtherDependency"
    jcenter()
}


dependencies {
    // ...
    implementation 'com.othercompany.someotherdependency:8.2.16'
}

反過來, MainInfrastructure聲明為其依賴項:

dependencies {
    // ...
    implementation 'com.myprojects.infrastructure:1.22.0'
    
}

當這是 state 的事物時, Main無法構建:

java.lang.NoClassDefFoundError: io/gsonfire/GsonFireBuilder

除非我在Main的依賴項中也包含jcenter() 如果我這樣做,一切都會很好。 但我懷疑這不是 Gradle 依賴項應該如何工作?

我知道GsonFireBuilderSomeOtherDependency所依賴的 class ,但是如果jcenter()沒有出現在使用Infrastructure的項目的存儲庫中,為什么不能達到?

順便說一句:在聲明SomeOtherDependency依賴項時,我是否使用compile / api / implementation都沒關系。

我肯定在這里誤解了一些事情:我怎樣才能擺脫Main聲明依賴關系Infrastructure的依賴關系的責任?

我認為您在這里混合了兩個概念。 依賴項是您需要的另一個 package(“什么”)。 存儲庫是查找依賴項(“從哪里”)的地方。 可以在多個存儲庫中找到依賴項。

例如,您可以運行本地存儲庫並緩存您曾經使用過的所有包。 如果存儲庫和依賴項捆綁在一起,您必須升級所有依賴項並將它們指向您的緩存存儲庫。 事實上,如果依賴項的依賴項指定了它們的存儲庫,則您必須手動挖掘所有這些並將它們指向您的緩存存儲庫。 這幾乎會破壞自動依賴管理的目的。 因此,您分別指定存儲庫和依賴項。

請參閱Gradle 中的依賴關系管理圖:本地路徑、Gradle 緩存、雲中的存儲庫 --- 每次調整依賴關系都會很痛苦。

這樣,您可能不需要指定依賴項使用的存儲庫。 您只需要配置具有所需依賴項的任何存儲庫。

暫無
暫無

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

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