Gradle 1.12 翻譯——第十四章. 教程,gradle1.12

來源:互聯網
上載者:User

Gradle 1.12 翻譯——第十四章. 教程,gradle1.12

有關其他已翻譯的章節請關注Github上的項目:https://github.com/msdx/gradledoc/tree/1.12,或訪問:http://gradledoc.qiniudn.com/1.12/userguide/userguide.html

本文原創,轉載請註明出處:http://blog.csdn.net/maosidiaoxian/article/details/41006627

關於我對Gradle的翻譯,以Github上的項目及http://gradledoc.qiniudn.com 上的文檔為準。如有發現翻譯有誤的地方,將首先在以上兩個地方更新。因時間精力問題,部落格中發表的譯文基本不會同步修改。


第十四章. 教程 - 雜七雜八14.1. 建立目錄

有一個常見的情況是,多個任務都依賴於某個目錄的存在。當然,你可以在這些任務的開始加入mkdir來解決這個問題。但這是種臃腫的解決方案。這裡有一個更好的解決方案 (僅適用於這些需要這個目錄的任務有著dependsOn的關係的情況):

樣本 14.1. 使用 mkdir 建立目錄

build.gradle

classesDir = new File('build/classes')task resources << {    classesDir.mkdirs()    // do something}task compile(dependsOn: 'resources') << {    if (classesDir.isDirectory()) {        println 'The class directory exists. I can operate'    }    // do something}

gradle -q compile的輸出結果

> gradle -q compileThe class directory exists. I can operate
14.2. Gradle 屬性和系統屬性

Gradle 提供了許多方式將屬性添加到您的構建中。 從Gradle 啟動的 JVM,你可以使用-D命令列選項向它傳入一個系統屬性。 Gradle命令的-D選項和java命令的-D選項有著同樣的效果。

此外,您也可以通過屬性檔案向您的project對象添加屬性。您可以把一個gradle.properties檔案放在 Gradle 的使用者主目錄 (預設為USER_HOME/.gradle) ,或您的項目目錄中。對於多項目構建,您可以將gradle.properties檔案放在任何子項目的目錄中。通過project對象,可以訪問到gradle.properties裡的屬性。使用者的主目錄中的屬性檔案比項目目錄中的屬性檔案更先被訪問到。

你也可以通過使用-P命令列選項來直接向您的項目對象添加屬性。在更多的用法中,您甚至可以通過系統和環境屬性把屬性直接傳給項目對象。例如,如果你在一個持續整合伺服器上運行構建,但你沒有這台機器的管理員權限,而你的構建指令碼需要一些不能讓其他人知道的屬性值,那麼,您就不能使用-P選項。在這種情況下,您可以在專案管理部分 (對普通使用者不可見) 添加一個環境屬性。[6]如果環境屬性遵循ORG_GRADLE_PROJECT_propertyName= somevalue的模式,這裡的propertyName會被添加到您的項目對象中。對系統屬性我們也支援相同的機制。唯一的區別是,它是org.gradle.projectpropertyName的模式。

通過gradle.properties檔案,你還可以設定系統屬性。如果此類檔案中的屬性有一個systemProp.的首碼,該屬性和它的值會被添加到系統屬性,且不帶此首碼。在多項目構建中,除了在根項目之外的任何項目裡的 systemProp.屬性集都將被忽略。也就是,只有根項目gradle.properties檔案裡的systemProp.屬性會被作為系統屬性。

未例 14.2. 使用 gradle.properties 檔案設定屬性

gradle.properties

gradlePropertiesProp=gradlePropertiesValuesystemProjectProp=shouldBeOverWrittenBySystemPropenvProjectProp=shouldBeOverWrittenByEnvPropsystemProp.system=systemValue

build.gradle

task printProps << {    println commandLineProjectProp    println gradlePropertiesProp    println systemProjectProp    println envProjectProp    println System.properties['system']}

gradle -q -PcommandLineProjectProp=commandLineProjectPropValue -Dorg.gradle.project.systemProjectProp=systemPropertyValue printProps的輸出結果

> gradle -q -PcommandLineProjectProp=commandLineProjectPropValue -Dorg.gradle.project.systemProjectProp=systemPropertyValue printPropscommandLineProjectPropValuegradlePropertiesValuesystemPropertyValueenvPropertyValuesystemValue
14.2.1.檢查項目的屬性

當你要使用一個變數時,你可以僅通過其名稱在構建指令碼中訪問一個項目的屬性。如果此屬性不存在,則會引發異常,並且構建失敗。如果您的構建指令碼依賴於一些可選屬性,而這些屬性使用者可能在比如 gradle.properties 檔案中設定,您就需要在訪問它們之前先檢查它們是否存在。你可以通過使用方法hasProperty('propertyName') 來進行檢查,它返回truefalse

14.3. 使用外部構建指令碼設定項目

您可以使用外部構建指令碼來配置當前項目。Gradle 構建語言的所有內容在外部指令碼中也可以使用。您甚至可以在外部指令碼中應用其他指令碼。

樣本14.3. 使用外部構建指令碼設定項目

build.gradle

apply from: 'other.gradle'

other.gradle

println "configuring $project"task hello << {    println 'hello from other script'}

gradle -q hello的輸出結果

> gradle -q helloconfiguring root project 'configureProjectUsingScript'hello from other script
14.4. 配置任意對象

您可以用以下非常易理解的方式配置任意對象。

樣本 14.4. 配置任意對象

build.gradle

task configure << {    pos = configure(new java.text.FieldPosition(10)) {        beginIndex = 1        endIndex = 5    }    println pos.beginIndex    println pos.endIndex}

gradle -q configure的輸出結果

> gradle -q configure15
14.5. 使用外部指令碼配置任意對象

你還可以使用外部指令碼配置任意對象

樣本14.5. 使用指令碼配置任意對象

build.gradle

task configure << {    pos = new java.text.FieldPosition(10)    // Apply the script    apply from: 'other.gradle', to: pos    println pos.beginIndex    println pos.endIndex}

other.gradle

beginIndex = 1;endIndex = 5;

gradle -q configure的輸出結果

> gradle -q configure15
14.6. 緩衝

為了提高響應速度,預設情況下 Gradle 會緩衝所有已編譯的指令碼。這包括所有構建指令碼,初始化指令碼和其他指令碼。你第一次運行一個項目構建時, Gradle 會建立.gradle目錄,用於存放已編譯的指令碼。下次你運行此構建時, 如果該指令碼自它編譯後沒有被修改,Gradle 會使用這個已編譯的指令碼。否則該指令碼會重新編譯,並把最新版本存在緩衝中。如果您通過--recompile-scripts選項運行 Gradle ,會丟棄緩衝的指令碼,然後重新編譯此指令碼並將其存在緩衝中。通過這種方式,您可以強制 Gradle 重建緩衝。


[6] TeamcityBamboo就是提供這個功能的 CI 伺服器的例子。


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.