Gradle依賴關係之間的區別。Gradle依賴關係編譯之間的區別,apk項目,編譯項目,提供的,執行項目
compile
apk project
compile project
provided project
implementation
我的問題是
什麼compile
,apk project
,compile project
,provided project
這裏有什麼區別?
Gradle依賴關係之間的區別。Gradle依賴關係編譯之間的區別,apk項目,編譯項目,提供的,執行項目
compile
apk project
compile project
provided project
implementation
我的問題是
什麼compile
,apk project
,compile project
,provided project
這裏有什麼區別?
這裏有兩件獨立的事情要討論:依賴配置和依賴源。
依賴關係配置
配置幫助定義的依賴,進而去除了發現並指定庫自己的項目/庫的疼痛傳遞要求,包括自動它們。在gradle這個結構的這個概念是非常相似的Maven's scopes:
compile
:編譯依賴關係是在一個項目的所有類路徑可用。而且,這些依賴關係會傳播到依賴項目。運行時通常需要編譯時間依賴性。apk
:定義運行時相關性。編譯時不需要依賴此範圍,但它將用於執行。這意味着您可以在編譯時節省時間,並且在項目實際運行時仍然可以使用依賴項。 This是何時使用apk依賴關係的一個很好的例子。provided
:這意味着該依賴關係在運行時環境中可用。因此,此範圍僅在編譯和測試類路徑中可用,且不是傳遞性的。它在Android項目中不受支持,但您可以通過定義您自己的配置來解決該問題,如討論here。還有更多的配置,你可以在Android遭遇,如testCompile
,它允許你指定將僅用於測試編譯時依賴,說你想在你的測試使用JUnit,然後你會做如下:一旦你瞭解爲您提供的配置
testCompile 'junit:junit:4.12'
依賴源
,你需要指定一個實際的依賴。依賴關係可能是內部的或外部的,你可能依賴於你正在處理的另一個庫,以及公共可用的庫。這裏是project
關鍵字出現的位置,允許您指定對內部模塊或庫的依賴關係。通過將依賴關係定義爲compile project
,即可將該模塊或庫作爲傳遞依賴項添加到項目中。
假設你有一個項目messages
有三個模塊(producer
,consumer
和shared
),項目結構將如下所示:
messages/
build.gradle
settings.gradle
consumer/
build.gradle
producer/
build.gradle
shared/
build.gradle
現在假設JSON格式,並且兩個consumer
和producer
存儲消息你想爲此使用google-gson。假設這兩個項目都有一些它們依賴的通用源代碼,即shared
模塊。然後consumer
的的build.gradle可以定義以下依賴性:
dependencies {
// Internal dependency to project shared
compile project (':shared')
// External dependency to publicly available library,
// through public repositories such as jcenter() or mavencentral()
compile 'com.google.code.gson:gson:1.7.2'
}
綜上所述,它是讓你聲明依賴關係compile
,compile project
,apk project
兩者配置和來源的組合更多!
Gradle使用*配置*而不是*範圍* – RaGe
謝謝@RaGe,你是對的。用適當的gradle詞彙表更新答案。 – unbekant