2016-03-11 99 views

回答

9

這裏有兩件獨立的事情要討論:依賴配置和依賴源。

依賴關係配置

配置幫助定義的依賴,進而去除了發現並指定庫自己的項目/庫的疼痛傳遞要求,包括自動它們。在gradle這個結構的這個概念是非常相似的Maven's scopes

  1. compile:編譯依賴關係是在一個項目的所有類路徑可用。而且,這些依賴關係會傳播到依賴項目。運行時通常需要編譯時間依賴性。
  2. apk:定義運行時相關性。編譯時不需要依賴此範圍,但它將用於執行。這意味着您可以在編譯時節省時間,並且在項目實際運行時仍然可以使用依賴項。 This是何時使用apk依賴關係的一個很好的例子。
  3. provided:這意味着該依賴關係在運行時環境中可用。因此,此範圍僅在編譯和測試類路徑中可用,且不是傳遞性的。它在Android項目中不受支持,但您可以通過定義您自己的配置來解決該問題,如討論here

還有更多的配置,你可以在Android遭遇,如testCompile,它允許你指定將僅用於測試編譯時依賴,說你想在你的測試使用JUnit,然後你會做如下:一旦你瞭解爲您提供的配置

testCompile 'junit:junit:4.12' 

依賴源

,你需要指定一個實際的依賴。依賴關係可能是內部的或外部的,你可能依賴於你正在處理的另一個庫,以及公共可用的庫。這裏是project關鍵字出現的位置,允許您指定對內部模塊或庫的依賴關係。通過將依賴關係定義爲compile project,即可將該模塊或庫作爲傳遞依賴項添加到項目中。

假設你有一個項目messages有三個模塊(producerconsumershared),項目結構將如下所示:

messages/ 
    build.gradle 
    settings.gradle 
    consumer/ 
     build.gradle 
    producer/ 
     build.gradle 
    shared/ 
     build.gradle 

現在假設JSON格式,並且兩個consumerproducer存儲消息你想爲此使用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' 
} 

綜上所述,它是讓你聲明依賴關係compilecompile projectapk project兩者配置來源的組合更多!

+2

Gradle使用*配置*而不是*範圍* – RaGe

+1

謝謝@RaGe,你是對的。用適當的gradle詞彙表更新答案。 – unbekant

相關問題