![](/img/trans.png)
[英]How do I add a project as JAR as a dependency of another project? (Gradle)
[英]Gradle: Why do I have to add repository needed by project dependency?
假設我有兩個項目Main
和Infrastructure
,它們都是用 Gradle 4.10.3
構建的。 Infrastructure
在其依賴項中聲明SomeOtherDependency
:
repositories {
// jcenter is needed for "SomeOtherDependency"
jcenter()
}
dependencies {
// ...
implementation 'com.othercompany.someotherdependency:8.2.16'
}
反過來, Main
將Infrastructure
聲明為其依賴項:
dependencies {
// ...
implementation 'com.myprojects.infrastructure:1.22.0'
}
當這是 state 的事物時, Main
無法構建:
java.lang.NoClassDefFoundError: io/gsonfire/GsonFireBuilder
除非我在Main
的依賴項中也包含jcenter()
。 如果我這樣做,一切都會很好。 但我懷疑這不是 Gradle 依賴項應該如何工作?
我知道GsonFireBuilder
是SomeOtherDependency
所依賴的 class ,但是如果jcenter()
沒有出現在使用Infrastructure
的項目的存儲庫中,為什么不能達到?
順便說一句:在聲明SomeOtherDependency
依賴項時,我是否使用compile
/ api
/ implementation
都沒關系。
我肯定在這里誤解了一些事情:我怎樣才能擺脫Main
聲明其依賴關系Infrastructure
的依賴關系的責任?
我認為您在這里混合了兩個概念。 依賴項是您需要的另一個 package(“什么”)。 存儲庫是查找依賴項(“從哪里”)的地方。 可以在多個存儲庫中找到依賴項。
例如,您可以運行本地存儲庫並緩存您曾經使用過的所有包。 如果存儲庫和依賴項捆綁在一起,您必須升級所有依賴項並將它們指向您的緩存存儲庫。 事實上,如果依賴項的依賴項指定了它們的存儲庫,則您必須手動挖掘所有這些並將它們指向您的緩存存儲庫。 這幾乎會破壞自動依賴管理的目的。 因此,您分別指定存儲庫和依賴項。
請參閱Gradle 中的依賴關系管理圖:本地路徑、Gradle 緩存、雲中的存儲庫 --- 每次調整依賴關系都會很痛苦。
這樣,您可能不需要指定依賴項使用的存儲庫。 您只需要配置具有所需依賴項的任何存儲庫。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.