博客逐步遷移至 極客兔兔的小站java
這是一篇Java Gradle入門級的隨筆,主要介紹Gradle的安裝與基本語法,這些內容是理解和建立build.gradle
的基礎,關於Gradle各類插件的使用將會在其餘隨筆中介紹。
有什麼疑問歡迎在文末關注留言,若是本文對你有用,那在右下角點個推薦吧~api
GRADLE_HOME/bin
添加到環境變量。Linux:安裝Gradle以後,配置PATH
工具
(1) 在~/.profile中加入GRADLE_HOME = YOUR_INSTALLATION_DIR
(2) 在~/.profile中加入PATH=$PATH:$GRADLE_HOME/bin(3) 執行source ~/.profile從新加載profile文件測試
gradle -v
可測試配置是否正確,更多命令行用法可執行gradle -h
。本文代碼測試版本爲Gradle 2.11gradle
一個腳本是一系列待執行操做(action)、屬性的集合,有時,咱們只想執行其中的某幾個操做,那這幾個操做及其相關的屬性構成了一個任務(task),任務是gradle中的執行單元。比任務更大的是項目(project),每每包括多個任務。優化
task hello << { println "Hello World!" + project.name // => Test // 或 println "Hello World!$project.name" // =>Test }
//已存在屬性直接賦值便可 version = "1.0" description = "I Am A Gradle Test!" // 新增屬性須要使用 ext ext { createDate = "Mar 2016" } ext.creator = "呆尐兔兔" // task hello1 task hello1 { doFirst { // name爲task的內置屬性,值爲task名稱 println "1. My Name is " + name // ==> hello println "2. I Belong To Project $project.name" //=>Test } doLast { println "3. The Version Is " + project.version println "4. I Am Created On " + project.createDate } } // task hello2 task hello2 << { ext { nickname = "excited"} println "Step 2: $nickname" //=> excited } hello2.doFirst { println "Step 1" } hello2.doLast { println "Step 3 " }
執行結果以下 C:\Users\gzd\Desktop\Test>gradle hello1 hello2 :hello1 1. My Name is hello1 2. I Belong To Project Test 3. The Version Is 1.0 4. I Am Created On Mar 2016 :hello2 Step 1 Step 2: excited Step 3
doFirst
-><<
->doLast
。<< 經常使用來開速添加任務。// 單任務依賴 // 該任務依賴的其餘任務將先執行 task hello1 << { println "Step 1" } task hello2(dependsOn:hello1) << { println "Step 2" } // 等價於 task hello2 << { println "Step 2" } // hello2.dependsOn hello1
// 多任務依賴 task hello2 << { // ... } hello2.dependsOn hello1, hello3 // 等價於 task hello2(dependsOn: [hello1,hello3]) << { ... }
task hello1 << { println "Step 1" } task hello0 << { println "Step 0" } task hello2(dependsOn:[hello1,hello0]) << { println "Step 2" } task hello3 << { println "Step 3" }
如下是執行結果 C:\Users\gzd\Desktop\Test>gradle hello2 hello3 Step 0 Step 1 Step 2 Step 3
字母表
。shouldRunAfter
、mustRunAfter
、finalizedBy
三個選項幫助定義任務執行順序。// 使用groovy語法動態構建任務 (1..6).each { task "hello$it" << { println "Executing $name" //=>hello(1..6) 見2.2 } } hello1.dependsOn hello2 hello3.dependsOn hello2 hello5.finalizedBy hello6 hello5.mustRunAfter hello4
依次執行下列命令 gradle hello1 ==> 2->1 gradle hello1,hello3 ==> 2->1->3 gradle hello5 ==> 5->6 gradle hello5,hello4 ==> 4->5->6
// 考慮如下代碼,執行gradle hello1將會報錯 // 換爲shouldRunAfter則不會報錯,執行順序爲3->2->1 hello1.dependsOn hello2 hello2.dependsOn hello3 hello3.mustRunAfter hello1
// 如下代碼將構建出hello0,hello1,hello2,hello3 // 下標從0開始 4.times { counter -> task "hello$counter" << { println "I'm $name" //=> hello[0..3] } }
// 如下代碼將匹配以clean開頭的任務 // 例如gradle cleanTest => Task is cleanTest // gradle cleanHello => Task is cleanHello tasks.addRule("Pattern:clean<fileName>") { String taskName -> if(taskName.startsWith("clean")) { task(taskName) << { println "Task is $name"; } } }
// gradle hello => hello:SKIPPED(條件不知足,不執行) // onlyIf 經常使用於判斷當前環境是否知足執行條件 version = '1.0' ext { createYear = '2015' } task hello << { println 'I was Created in ' + createYear } hello.onlyIf { project.hasProperty('createYear') && project.createYear == '2016'}
// gradle h2 => :hello1 SKIPPED :hello2 Step 2 // 即便2依賴1,1被禁用,2仍能執行 // 經常使用於測試,更換舊代碼 task hello1 << { println 'Step 1' } task hello2(dependsOn:hello1) << { println 'Step 2' } hello1.enabled = false
enabled
是task的一個屬性,hello1 能夠寫爲task hello1 { enabled = false; doLast { println 'Step 1' } }
task hello { ext { testFile = file('in.txt') } String outFileName = 'out.txt' File outFile = new File(outFileName) inputs.file testFile outputs.file outFile doLast { def property = new XmlParser().parse(testFile) def key = property.key[0].text() def value = property.value[0].text() def destFile = new File(outFileName) destFile.text = "$key = $value" } }
第一次執行 gradle hello => :hello BUILD SUCCESSFUL 第二次執行 gradle hello => :hello UP-TO-DATE
--rerun-tasks
參數gradle hello --rerun-tasks // gradle -b build.gradle hello --rerun-tasks