2013-07-21 55 views
116

我是Gradle的新手,我正在閱讀文檔,但我不明白它的某些部分。其中一個部分與buildscript區塊連接。它的目的是什麼?Gradle中buildscript塊的用途

如果您的構建腳本需要使用外部庫,你可以把它們在構建腳本自身添加到腳本的類路徑。您可以使用buildscript()方法執行此操作,並傳遞一個聲明構建腳本類路徑的閉包。

buildscript { 
    repositories { 
    mavenCentral() 
    } 
    dependencies { 
    classpath group: 'commons-codec', name: 'commons-codec', version: '1.2' 
    } 
} 

正常,但用什麼樣的區別:

repositories { 
    mavenCentral() 
} 
dependencies { 
    compile group: 'commons-codec', name: 'commons-codec', version: '1.2' 
} 

例如,爲什麼有必要使用buildscript

+0

[Gradle buildscript dependencies]可能的重複(http://stackoverflow.com/questions/13923766/gradle-buildscript-dependencies) – fejese

回答

84

buildScript塊確定哪些插件,任務類和其他類可用於構建腳本的其餘部分。如果沒有buildScript塊,您可以使用Gradle開箱即用的所有內容。如果您還想使用第三方插件,任務類或其他類(在構建腳本中!),則必須在buildScript塊中指定相應的依賴關係。

+0

我無法理解Em。我寫了一個帶有_group:'sample.infotask'的任務類,名稱:'infotask',版本:'1.0'' 並使用_uploadArchives_任務將其上傳到本地倉庫_ ../lib'_ 在另一個項目中if我用我的工作,我必須寫: 'buildscript { 庫{ 行家{URL '文件:../ LIB' }} 依賴 { 類路徑組: 'sample.infotask',名稱: 'infotask',版本: '1.0' } } 我對不對? 爲什麼我們必須使用_buildScript_ block?當我上傳本地的神器時,我的機器上裝有罐子。只需告訴Gradle從什麼地方放入我的classpath,沒有別的什麼特別的東西在這裏? – Xelian

+17

您必須使用'buildScript'塊,因爲Gradle需要這些信息才能*瞭解構建腳本的其餘部分*。這就是爲什麼你必須在單獨的通道中提供這些信息('buildScript'塊)。從技術上講,Gradle需要這些信息來編譯和評估構建腳本的其餘部分。隱藏的內容是Gradle將構建腳本分成兩個腳本('buildScript'塊和其他所有內容),以便它們可以分別處理它們。 –

39

我很欣賞彼得的回答......但是對我而言,它並不直接顯而易見構建腳本的其餘部分在答案和文檔中的含義。

通常引入依賴性功能用於Java程序或任何其他您可能正在編寫的程序。引入Spring說,不能在構建腳本中使用,而應該在Java程序中使用。將它放在buildscript閉包中可以確保依賴關係可用於gradle構建本身。不是輸出程序。

55
  • 全球一級dependenciesrepositories部分列出的依賴,需要建立源和運行源等
  • buildscript對於build.gradle文件本身。因此,這將包含依賴關係說創建RPM包,Dockerfile,以及任何其他依賴於所有相關build.gradle
+4

謝謝 - 這是迄今爲止最明確的答案,恕我直言。 – RCross

+1

所有對gradle本身的擴展都是通過buildscript-> dependencies找到的,而依賴關係又是從buildscript-> repositories部分下載的。 buildscript塊,在開始執行構建任務(如源代碼編譯等)之前先運行(構建系統準備階段)。 –

1

的「buildscript」配置部分運行的任務是gradle這個本身(即改變的是如何gradle這個能力執行構建)。所以這部分通常會包含Android Gradle插件。

0

這有點高但希望有所幫助。

對我來說,一旦我開始明白什麼是a building block,方法和任務,我就會明白區分。語法如何,你如何配置它們等等。所以我建議你經歷所有這些。之後,您可以開始理解這種語法。

然後知道對象build.gradle(Project類的一個實例)的類型是非常重要的,這樣才能知道build.gradle文件中的內容。這將回答'buildScript'和其他來自哪裏等等。爲了擴展您的功能/特性(比如android),請參閱plugins如何提供幫助。

最後但並非最不重要,這裏有一個非常好的tutorial談論關閉,代表這是理解腳本必不可少的概念。

相關問題