在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ 物聯(lián)網(wǎng)/ 教程-"This and That"
快速開(kāi)始 Web 應(yīng)用
更多關(guān)于任務(wù)
編寫(xiě)構(gòu)建腳本
守護(hù)進(jìn)程
問(wèn)題解決
日志
插件
總覽
快速開(kāi)始 Java
教程-"This and That"
使用 Gradle 圖形化用戶(hù)界面
從 Gradle 使用 Ant
依賴(lài)管理的基礎(chǔ)
構(gòu)建環(huán)境
處理文件
構(gòu)建腳本的基本
使用 Gradle 命令行
快速開(kāi)始 Groovy
安裝
介紹

教程-"This and That"

創(chuàng)建目錄

多個(gè) task 依賴(lài)于現(xiàn)存的目錄,這是常見(jiàn)的情況。當(dāng)然,你可以在 task 前添加 mkdir 但這不是好辦法,因?yàn)槟阒恍枰淮?,卻要不斷重復(fù)代碼序列(看看 DRY principle )。好的做法是在 task 間使用 dependsOn 來(lái)重用 task 創(chuàng)建目錄

Example 14.1. Directory creation with mkdir

build.gradle

    def 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
    }

執(zhí)行 gradle -q compile 輸出

    > gradle -q compile
    The class directory exists. I can operate

屬性

Gradle 提供了許多方式將屬性添加到您的構(gòu)建中。 從 Gradle 啟動(dòng)的 JVM,你可以使用 -D 命令行選項(xiàng)向它傳入一個(gè)系統(tǒng)屬性。 Gradle 命令的 -D 選項(xiàng)和 java 命令的 -D 選項(xiàng)有著同樣的效果。

此外,您也可以通過(guò)屬性文件直接向您的 project 對(duì)象添加屬性。您可以把一個(gè) gradle.properties 文件放在 Gradle 的用戶(hù)主目錄 (默認(rèn)如果不是 USER_HOME /.gradle 設(shè)置的話(huà),就由 “GRADLE_USER_HOME” 環(huán)境變量定義 ) ,或您的項(xiàng)目目錄中。對(duì)于多項(xiàng)目構(gòu)建,您可以將 gradle.properties 文件放在任何子項(xiàng)目的目錄中。通過(guò) project 對(duì)象,可以訪(fǎng)問(wèn)到 gradle.properties 里的屬性。用戶(hù)的主目錄中的屬性文件比項(xiàng)目目錄中的屬性文件更先被訪(fǎng)問(wèn)到。

你還可以通過(guò)使用 -P 命令行選項(xiàng)來(lái)直接向您的 project 對(duì)象添加屬性。

也可以通過(guò) 特別命名的系統(tǒng)屬性 或者環(huán)境屬性把屬性設(shè)置 project 屬性。這個(gè)特性非常有用,通常出于安全原因,當(dāng)你在持續(xù)集成的服務(wù)器沒(méi)有管理員權(quán)限時(shí),對(duì)于設(shè)置屬性值你是不可見(jiàn)的。在這種情況下,你就不能使用 -P 選項(xiàng),也不能修改系統(tǒng)級(jí)別的配置文件。正確的策略是,要改變你的持續(xù)集成配置建設(shè)工作,增加一個(gè)環(huán)境變量設(shè)置符合預(yù)期的模式。這不會(huì)對(duì)系統(tǒng)正常的用戶(hù)可見(jiàn)的。( Jenkins, Teamcity, 或者 Bamboo 是這些 CI (Continuous Integration 持續(xù)集成)服務(wù)商,提供這些功能)

如果環(huán)境變量名稱(chēng)類(lèi)似與 ORG_GRADLE_PROJECT_prop=somevalue, Gradle 將會(huì)設(shè)置 prop 屬性到你的 project 對(duì)象,值就是 somevalue 。Gradle 也提供了系統(tǒng)屬性的支持,但有著不同命名方式,類(lèi)似的 org.gradle.project.prop

也可在 gradle.properties 設(shè)置系統(tǒng)屬性。如果此類(lèi)文件中的屬性有一個(gè) systemProp. 的前綴,像systemProp.propName,該屬性和它的值會(huì)被添加到系統(tǒng)屬性,且不帶此前綴。在多 project 構(gòu)建中,除了在根項(xiàng)目之外的任何項(xiàng)目里的systemProp. 屬性集都將被忽略。也就是,只有根 project 的 gradle.properties 文件里的 systemProp.前綴的 屬性會(huì)被作為系統(tǒng)屬性。

Example 14.2. Setting properties with a gradle.properties file

gradle.properties

    gradlePropertiesProp=gradlePropertiesValue
    sysProp=shouldBeOverWrittenBySysProp
    envProjectProp=shouldBeOverWrittenByEnvProp
    systemProp.system=systemValue

build.gradle

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

執(zhí)行 gradle -q -PcommandLineProjectProp=commandLineProjectPropValue -Dorg.gradle.project.systemProjectProp=systemPropertyValue printProps 輸出

    > gradle -q -PcommandLineProjectProp=commandLineProjectPropValue -Dorg.gradle.project.systemProjectProp=systemPropertyValue printProps
    commandLineProjectPropValue
    gradlePropertiesValue
    systemPropertyValue
    envPropertyValue
    systemValue

檢查 project 屬性

當(dāng)你要使用一個(gè)變量時(shí),你可以?xún)H通過(guò)其名稱(chēng)在構(gòu)建腳本中訪(fǎng)問(wèn)一個(gè)項(xiàng)目的屬性。如果此屬性不存在,則會(huì)引發(fā)異常,并且構(gòu)建失敗。如果您的構(gòu)建腳本依賴(lài)于一些可選屬性,而這些屬性用戶(hù)可能在比如 gradle.properties 文件中設(shè)置,您就需要在訪(fǎng)問(wèn)它們之前先檢查它們是否存在。你可以通過(guò)使用方法 hasProperty('propertyName') 來(lái)進(jìn)行檢查,它返回 true 或 false。

使用外部構(gòu)建腳本配置項(xiàng)目

你可以使用一個(gè)外部構(gòu)建腳本配置當(dāng)前 project 。所有的 Gradle 構(gòu)建語(yǔ)言都可用在外部腳本。。您甚至可以在外部腳本中應(yīng)用其他腳本。

Example 14.3. Configuring the project using an external build script

build.gradle

    apply from: 'other.gradle'
    other.gradle

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

執(zhí)行 gradle -q hello 輸出

    > gradle -q hello
    configuring root project 'configureProjectUsingScript'
    hello from other script

配置任意對(duì)象

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

Example 14.4. Configuring arbitrary objects

build.gradle

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

執(zhí)行 gradle -q configure 輸出

    > gradle -q configure
    1
    5

使用外部腳本配置任意對(duì)象

Example 14.5. Configuring arbitrary objects using a script

build.gradle

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

other.gradle

執(zhí)行 gradle -q configure 輸出

    > gradle -q configure
    1
    5

緩存

為了提高響應(yīng)速度,默認(rèn)情況下 Gradle 會(huì)緩存所有已編譯的腳本。這包括所有構(gòu)建腳本,初始化腳本和其他腳本。你第一次運(yùn)行一個(gè)項(xiàng)目構(gòu)建時(shí), Gradle 會(huì)創(chuàng)建 .gradle 目錄,用于存放已編譯的腳本。下次你運(yùn)行此構(gòu)建時(shí), 如果該腳本自它編譯后沒(méi)有被修改,Gradle 會(huì)使用這個(gè)已編譯的腳本。否則該腳本會(huì)重新編譯,并把最新版本存在緩存中。如果您通過(guò) --recompile-scripts 選項(xiàng)運(yùn)行 Gradle ,會(huì)丟棄緩存的腳本,然后重新編譯此腳本并將其存在緩存中。通過(guò)這種方式,您可以強(qiáng)制 Gradle 重新生成緩存

上一篇:安裝下一篇:總覽