自定義任務
任務定義方式,總體分為兩大類:一種是通過 Project 中的task()方法,另一種是通過tasks 對象的 create 或者register 方法。
//任務名稱,閉包都作為參數println "taskA..."
task('A',{
})
//閉包作為最后一個參數可以直接從括號中拿出來println "taskB..."
task('B'){
}
//groovy語法支持省略方法括號:上面三種本質是一種
task C{
}
//action屬性可以設置為閉包task(map,"D");
def map=new HashMap<String,Object>(); map.put("action",{println "taskD.."})
tasks.create('E'){//使用tasks的create方法println "taskE.."
}// 基于一個存在的task來創建,類似與繼承
tasks.register("copyTask", Copy) {from("source")into("target")include("*.war")
}
register執行的是延遲創建。也即只有當task被需要使用的時候才會被創建。
//action屬性可以設置為閉包,設置task自身的行為
def map = new HashMap<String, Object>();
map.put("config", "someConfigValue")
map.put("action", { println "taskD.." })
tasks.register('task1') {// 配置階段的工作if (map.containsKey("config")) {println "配置階段: ${map.get("config")}"}// 給任務分組group("rootTask")// 給任務添加描述信息description "這是最簡單的任務"//直接設置任務開啟,默認值為trueenabled(true)dependsOn = [clean]// 是否替換已存在的任務,默認為falseoverwrite = true// 基于一個存在的task來創建,類似與繼承type = Delete/*** 提示 1 :task 的配置段是在配置階段完成* 提示 2 :task 的 doFirst、doLast 方法是執行階段完成,并且 doFirst 在 doLast 執行之前執行。* 提示 3 :區分任務的配置段和任務的行為,任務的配置段在配置階段執行,任務的行為在執行階段執行* */println "這是第一個自定義任務"doFirst {println("task1 doFirst")}doLast {println("task1 doLash")}// 執行階段的工作doLast {if (map.containsKey("action")) {map.get("action").call()}}
}
// 先于 task1 中定義的 doFirst 執行
task1.doFirst {println("task1 doFirst outer")
}
// 后于 task1 中定義的 doLast 執行
task1.doLast {println("task1 doLast outer")
}
gradle命令分類及說明
常見任務
- gradle build: 構建項目:編譯、測試、打包等操作
- gradle run :運行一個服務,需要application 插件支持,并且指定了主啟動類才能運行
- gradle clean: 請求當前項目的 build 目錄
- gradle init : 初始化 gradle 項目使用
- gradle wrapper:生成wrapper 文件夾的。
// gradle wrapper 升級wrapper 版本號 gradle wrapper --gradle-version=4.4 // 關聯源碼用項目報告相關任務 gradle wrapper --gradle-version 5.2.1 --distribution-type all
項目報告相關任務
- gradle projects : 列出所選項目及子項目列表,以層次結構的形式顯示
- gradle tasks: 列出所選項目【當前 project,不包含父、子】的已分配給任務組的那些任務。
- gradle tasks --all :列出所選項目的所有任務。
- gradle tasks --group=“build setup”:列出所選項目中指定分組中的任務。
- gradle help --task someTask :顯示某個任務的詳細信息
- gradle dependencies :查看整個項目的依賴信息,以依賴樹的方式顯示
- gradle properties 列出所選項目的屬性列表
調試相關選項
- -h,–help: 查看幫助信息
- -v, --version:打印 Gradle、 Groovy、 Ant、 JVM 和操作系統版本信息。
- -S, --full-stacktrace:打印出所有異常的完整(非常詳細)堆棧跟蹤信息。
- -s,–stacktrace: 打印出用戶異常的堆棧跟蹤(例如編譯錯誤)。
- -Dorg.gradle.daemon.debug=true: 調試 Gradle 守護進程。
- -Dorg.gradle.debug=true:調試 Gradle 客戶端(非 daemon)進程。
- -Dorg.gradle.debug.port=(port number):指定啟用調試時要偵聽的端口號。默認值為 5005。
性能選項:
可以在gradle.properties 中指定這些選項中的許多選項,因此不需要命令行標志
- –build-cache, --no-build-cache: 嘗試重用先前版本的輸出。默認關閉(off)。
- –max-workers: 設置 Gradle 可以使用的woker 數。默認值是處理器數。
- -parallel, --no-parallel: 并行執行項目。有關此選項的限制,請參閱并行項目執行。默認設置為關閉(off)
守護進程選項
- –daemon, --no-daemon: 使用 Gradle 守護進程運行構建。默認是on
- –foreground:在前臺進程中啟動 Gradle 守護進程。
- -Dorg.gradle.daemon.idletimeout=(number of milliseconds):
Gradle Daemon 將在這個空閑時間的毫秒數之后停止自己。默認值為 10800000(3 小時)。
日志選項
- -Dorg.gradle.logging.level=(quiet,warn,lifecycle,info,debug):
- 通過 Gradle 屬性設置日志記錄級別。
-q, --quiet: 只能記錄錯誤信息
-w, --warn: 設置日志級別為 warn
-i, --info: 將日志級別設置為 info
-d, --debug:登錄調試模式(包括正常的堆棧跟蹤)
其它(*)
- -x:-x 等價于: --exclude-task : 常見gradle -x test clean build
- –rerun-tasks: 強制執行任務,忽略up-to-date ,常見gradle build --rerun-tasks
- –continue: 忽略前面失敗的任務,繼續執行,而不是在遇到第一個失敗時立即停止執行。每個遇到的故障都將在構建結束時報告,常見:gradle build --continue。
- gradle init --type pom :將maven 項目轉換為gradle 項目(根目錄執行)
- gradle [taskName] :執行自定義任務
application和java插件使用場景差異
application 插件隱式應用了 java 插件
java 插件適用場景
庫項目:當你開發的是一個 Java 庫,只需要將代碼編譯、測試并打包成 JAR 文件供其他項目使用時,使用java插件就足夠了。例如,開發一個工具類庫,只需要提供功能接口,不需要具備可執行性。
模塊開發:在大型項目中,可能會有多個模塊,每個模塊只負責特定的功能。對于這些模塊的開發,可以使用 java 插件進行構建和管理。
application 插件適用場景
獨立應用開發:當你開發的是一個獨立的 Java 應用程序,如控制臺應用、桌面應用或服務器應用時,使用 application插件可以方便地創建可執行的分發文件,并直接運行應用程序。
快速開發和測試:在開發過程中,使用 application 插件的 run 任務可以快速啟動應用程序進行測試,提高開發效率。