Gradle項(xiàng)目構(gòu)建工具-INDEX

安裝步驟

第一步:

從網(wǎng)站上下載 Gradle

第二部:

部署環(huán)境變量


檢查是否安裝成功:

gradle -v


由上圖我們可以看到gradle對(duì)應(yīng)的版本信息,至此環(huán)境搭建已經(jīng)完成。

Gradle的語(yǔ)法

簡(jiǎn)介

Gradle構(gòu)建腳本文件用來(lái)處理兩件事情:一個(gè)是項(xiàng)目和另一個(gè)的任務(wù)。每個(gè)Gradle
生成表示一個(gè)或多個(gè)項(xiàng)目。一個(gè)項(xiàng)目表示一個(gè)JAR庫(kù)或Web應(yīng)用程序,也可能表示由其他項(xiàng)目產(chǎn)生的JAR文件組裝的ZIP。 簡(jiǎn)單地說(shuō),一個(gè)項(xiàng)目是由不同的任務(wù)組成。一個(gè)任務(wù)是指構(gòu)建執(zhí)行的一塊工作。任務(wù)可能是編譯一些類,創(chuàng)建一個(gè)JAR,產(chǎn)生的Javadoc或發(fā)布一些歸檔文件庫(kù)。Gradle是一個(gè)基于Apache Ant和Apache Maven概念的項(xiàng)目自動(dòng)化建構(gòu)工具。它使用一種基于Groovy的特定領(lǐng)域語(yǔ)言(DSL)來(lái)聲明項(xiàng)目設(shè)置,拋棄了基于XML的各種繁瑣配置。 面向Java應(yīng)用為主。當(dāng)前其支持的語(yǔ)言限于Java、Groovy和Scala,計(jì)劃未來(lái)將支持更多的語(yǔ)言。

編寫(xiě)構(gòu)建腳本

Gradle提供了一個(gè)域特定語(yǔ)言(DSL),用于描述構(gòu)建。 它使用 Groovy 語(yǔ)言,使其更容易來(lái)形容和構(gòu)建。Gradle 中的每一個(gè)構(gòu)建腳本使用UTF-8進(jìn)行編碼保存,并命名為 build.gradle 。

創(chuàng)建對(duì)應(yīng)的build.gradle文件,并且編寫(xiě)對(duì)應(yīng)的helloword任務(wù)

task helloworld << {
  println 'holle world !'
}

在dos環(huán)境下執(zhí)行命令:

gradle -q helloworld

由此我們可以得到執(zhí)行g(shù)radle腳本的命令語(yǔ)法:

gradle -q <taskName>

gradle如何使用groovy API

首先,我們看一個(gè)將字符串轉(zhuǎn)化成大寫(xiě)的API方法:

task uper << {
    String inputStr = "hello world !"
    println "初始化字符串的值:"+inputStr
    println "轉(zhuǎn)化成大寫(xiě)之后的字符串的值:"+inputStr.toUpperCase()
}

執(zhí)行任務(wù):

gradle -q uper

結(jié)果:

隱式參數(shù) $it 的使用:

task count << {
    4.times{
        print "$it"
    }
    println ''
}

time類似于迭代器,而$it表示迭代項(xiàng)。
執(zhí)行上面的任務(wù):

gradle -q count

上面代碼中$it引用必須使用雙引號(hào)擴(kuò)起來(lái),否則會(huì)當(dāng)做字符串打印傳來(lái),如下所示:

使用雙引號(hào)正常輸出:

groovy 的jdk方法
  • each()方法
task groovyJdkMethod{
    String myName = 'lenyan_zhao'
    myName.each(){
        println "$it"
    }
}

執(zhí)行任務(wù):

gradle -q groovyJdkMethod

結(jié)果:



由此看出each方法迭代器方式實(shí)現(xiàn)字符串字符的迭代處理。

Task依賴

多個(gè)任務(wù)之間存在依賴關(guān)系,同設(shè)置參數(shù)dependsOn:<taskName>來(lái)指定當(dāng)前任務(wù)的依賴任務(wù):

//任務(wù)的依賴
task info (dependsOn:helloworld)<<{
    println 'lenyan_zhao'
}

info任務(wù)依賴于helloworld任務(wù),看執(zhí)行結(jié)果:


由結(jié)果可知,依賴關(guān)系先執(zhí)行被依賴項(xiàng),后執(zhí)行當(dāng)前任務(wù),當(dāng)然這是比較正常的一種依賴關(guān)系,還有其他非正常的依賴關(guān)系,可以參考另一篇文章Gradle項(xiàng)目構(gòu)建工具--快捷方式doLast以及亂碼問(wèn)題;

Task屬性

  • 以任務(wù)名稱作為屬性查看任務(wù)名稱
task hello

println hello.name
println project.hello.name

執(zhí)行結(jié)果:

  • 以任務(wù)集合的方式查看任務(wù)的名稱
task hello

println hello.name
println project.hello.name
println tasks["hello"].name
println project.tasks["hello"].name

添加依賴關(guān)系

要將一個(gè)任務(wù)依賴于另一個(gè)任務(wù),這意味著當(dāng)一個(gè)任務(wù)完成時(shí),另一個(gè)任務(wù)將開(kāi)始。 每個(gè)任務(wù)都使用任務(wù)名稱進(jìn)行區(qū)分。 任務(wù)名稱集合由其任務(wù)集合引用。 要引用另一個(gè)項(xiàng)目中的任務(wù),應(yīng)該使用項(xiàng)目路徑作為相應(yīng)任務(wù)名稱的前綴。

  • 靜態(tài)依賴關(guān)系
task t1  << {
    println 't1'
}

task t2(dependsOn:'t1') << {
    println 't2'
}

gradle -q t2

執(zhí)行結(jié)果:


  • 動(dòng)態(tài)添加依賴關(guān)系
task t3 << {
    println 't3'
}

task t4 << {
    println 't4'
}
t4.dependsOn t3

執(zhí)行結(jié)果:


  • 閉包方式批量添加依賴
    這種方式可以通過(guò)模糊匹配任務(wù)名稱的方式進(jìn)行批量添加對(duì)應(yīng)的依賴任務(wù):
//閉包批量添加依賴
task t5 << {
    println 't5'
}
t5.dependsOn{
    tasks.findAll{
        //模糊匹配前綴是以lib開(kāi)頭的任務(wù)
        task -> task.name.startsWith('lib')
    }
}
task lib1 << {
    println 'lib1'
}
task lib2 << {
    println 'lib2'
}
task lib3 << {
    println 'lib3'
}
task lib4 << {
    println 'lib4'
}

執(zhí)行任務(wù)t5,執(zhí)行結(jié)果:


添加任務(wù)屬性

//添加任務(wù)屬性
task copy(type:Copy){
    println 'start copy .'
    description "Copies the resource directory to the target directory."
    from "resources"
    into "target"
    include ('**/*.txt','**/*.xml','**/*.properties')
    println "description applied"
}

description : 表示任務(wù)的描述屬性
from : 資源文件的來(lái)源屬性
into : 資源文件復(fù)制到目標(biāo)文件夾配置屬性
include : 配置復(fù)制文件的類型
執(zhí)行結(jié)果:


注:此處代碼如果任務(wù)添加快捷方式,執(zhí)行任務(wù)時(shí),不會(huì)輸出任何信息

跳過(guò)任務(wù)

如果用于跳過(guò)任務(wù)的邏輯不能用謂詞表示,則可以使用StopExecutionException。 如果操作拋出此異常,則會(huì)跳過(guò)此操作的進(jìn)一步執(zhí)行以及此任務(wù)的任何后續(xù)操作的執(zhí)行。 構(gòu)建繼續(xù)執(zhí)行下一個(gè)任務(wù)。

//跳過(guò)任務(wù)
task complie << {
    println 'We are doing the complie'
}
complie.doFirst{
    if(true){
        throw new StopExecutionException()
    }
}
task myTask(dependsOn:'complie') << {
    println 'I\'m not affected'
}

執(zhí)行結(jié)果:


本篇文章只是簡(jiǎn)單的介紹了Gradle基本操作語(yǔ)法以及window環(huán)境搭建流程,后續(xù)將會(huì)慢慢跟進(jìn)對(duì)應(yīng)的其他內(nèi)容。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,578評(píng)論 19 139
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 47,275評(píng)論 6 342
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,094評(píng)論 25 709
  • 導(dǎo)語(yǔ): 隨著技術(shù)的發(fā)展,不管是前端開(kāi)發(fā)、服務(wù)端開(kāi)發(fā)或者是移動(dòng)端開(kāi)發(fā)(移動(dòng)也是前端的一個(gè)分支)中都會(huì)用到自動(dòng)化構(gòu)建工...
    伊始雨深閱讀 3,153評(píng)論 0 4
  • 當(dāng)歲月的蹉跎和生活的壓力在你臉上留下滄桑,你才意識(shí)到,你已經(jīng)25歲。 是的,25。 25歲,你品嘗過(guò)各種烈酒,懂...
    白shirtAysh閱讀 556評(píng)論 0 0

友情鏈接更多精彩內(nèi)容