via: https://tianyu94.com/2019/06/...
task helloWorld { doLast { println 'Hello world~' } }
$ gradle -q helloWorld Hello world~
-q
quiet 只輸出 task 的相關信息
DefaultTask
類,標準的 Task
實現。task startTask { doLast { hello() } } def hello() { println 'Hello~' }
$ gradle startTask Hello~
3.times { task 'repeatTask$it' { println 'I am repeat task' } } // 指定此 task 需依賴 repeatTask0 task groupTherapy(dependsOn: repeatTask0)
$ gradle groupTherapy :repeatTask0 I am repeat task :repeatTask1 I am repeat task :repeatTask2 I am repeat task
$ gradle groupTherapy -x repeatTask1 :repeatTask0 I am repeat task :repeatTask2 I am repeat task
-x
排除指定 task
$ gradle repeatTask0 groupTherapy :repeatTask0 I am repeat task :repeatTask1 I am repeat task :repeatTask2 I am repeat task
執行多個 task,且每一個 task 僅執行一次
task printVersion { doFirst { println 'Version 0.1 in doFirst' } doLast { println 'Version 0.1 in doLast' } } printVersion.doFirst { println 'First action' } printVersion.doLast { println 'Last action' }
$ gradle printVersion First action Version 0.1 in doFirst Version 0.1 in doLast Last action
task myTask { group = 'group1' description = 'I am myTask of group1' } // or task myTask(group: 'group1', description: 'I am myTask of group1') { // ... }
task myTask(dependsOn: [otherTask1, otherTask2]) { // ... }
注意,若執行 myTask,它依賴的 otherTask1 和 otherTask2 (除其自己有依賴關係外)並不會保證執行的前後順序與代碼順序一致。這個特徵可以使多個 task 並行執行提升效率,或是忽略固定的順序來保證代碼的維護性和避免潛在的破壞
task task1 { doLast { println 'task1' } } task task2 { doLast { println 'task2' } } task1.finalizedBy task2
$ gradle task1 task1 task2
若終結器 task 執行失敗,則不會影響 Gradle 的 task 的執行進度
-?
/ -h
/ --help
打印幫助信息-b
/ --build-file
指定構建文件 e.g. gradle -b my.gradle
--offline
使用緩存離線構建-q
/ --quiet
, -w
/ --warning
, -i
/ --info
, -d
/ --debug
日誌等級s
/ --stacktrace
打印簡要堆棧跟蹤S
/ --full-stacktrace
打印全部堆棧跟蹤tasks
顯示項目可運行的 task,-a
/ --all
顯示所有 taskproperties
顯示項目中可用屬性apply plugin: 'java'
apply plugin: 'war' // 部分自定義屬性設置 webAppDirName = 'mywebfiles' // 指定Web應用的源代碼路徑 war { // 將 mydir1,mydir2 路徑添加到 war 文件的根目錄下 from 'mydir1' from 'mydir2' }
// 在 Gradle 4.0 以前可用 apply plugin: 'jetty' // 在 Gradle 4.0 以後 jetty 插件已移除,替換爲 Gretty // 其餘引用方法見官網:https://gretty-gradle-plugin.github.io/gretty-doc/Getting-started.html apply from: 'https://raw.github.com/akhikhl/gretty/master/pluginScripts/gretty.plugin' // Gretty 屬性設置 // 詳情見官網:https://gretty-gradle-plugin.github.io/gretty-doc/Gretty-configuration.html gretty { httpPort = 8081 // 指定服務端口 contextPath = '/MyWebApp' // 指定 url 根路徑 // ... many more properties }
appRun
/ jettyRun
運行程序version = 0.1 // 設置項目版本 sourceCompatibility = 1.8 // 設置Java編譯兼容版本爲 1.8 jar { manifest { // 添加屬性到 Jar 文件中 attributes 'Main-Class': 'path.to.your.MainClass' } } sourceSets { main { java { // 自定義源代碼路徑,默認是 /src/main/java/ srcDirs = ['your_src_dir_path'] } } test { java { // 自定義測試代碼路徑,默認是 /src/test/java srcDirs = ['your_test_dir_path'] } } }
project.ext.myProp = 'hello' // or ext.myProp = 'hello' // or myProp = 'hello'
或者在 gradle.properties
文件中定義拓展屬性html
repositories { mavenCentral() // 使用 Maven Central 2 倉庫 } // 如下依賴存在多個重複,僅作示例 dependencies { // 編譯使用 compile group: 'org.apache.commons', name: 'commons-lang3', version: '3.9' // 簡寫形式,用冒號隔開 compile 'org.apache.commons:commons-lang3:3.9' // 同 compile ,在 Gradle 5.x 後(建議)用此替換 compile implementation 'org.apache.commons:commons-lang3:3.9' // 編譯時須要,在運行時由環境提供 providedCompile 'javax.servlet:servlet-api:2.5' // 運行時提供 runtime 'javax.servlet:jstl:1.1.2' }
$ gradle wrapper # 在構建腳本 build.gradle 旁會生成 gradle/wrapper/... 的包裝器文件 *.jar 和 *.properties # 同時生成 gradlew(for linux),gradlew.bat(for windows)
gradlew.bat ...
gradlew ...
task wrapper(type: Wrapper) { // 指定 Gradle 版本 gradleVersion = '5.1.1' // 獲取 Gradle 包的 url distributionUrl = 'http://mycustomserver.com/gradle/dists' // 包裝器被解壓後存放的相對路徑 distributionPath = 'gradle-dists' }
筆記部份內容來源:Gradle in Action https://www.manning.com/books...