Gradle學習-3 Gradle構建的生命周期

Gradle常用文件目錄
在這里插入圖片描述

Gradle 構建的生命周期,有3個階段:

  • 初始化階段
  • 配置階段
  • 執行階段

1、初始化階段

  • Gradle 支持構建單個工程個多個子工程,初始化階段主要負責收集所有參與本次構建的子工程,創建一個項目的層次結構,并未每個項目創建一個 project 實例。與該階段關系最大的就是根目錄下的 setting.gradle 文件。

可以在 setting.gradle中添加Gradle構建生命周期監聽

setting.gradle

println("[Gradle生命周期] - 我是 setting.gradle")//Gradle構建生命周期監聽
gradle.addBuildListener(new BuildAdapter() {@Overridevoid settingsEvaluated(Settings settings) {super.settingsEvaluated(settings)println("[Gradle生命周期] - 初始化階段完成")}@Overridevoid projectsEvaluated(Gradle gradle) {super.projectsEvaluated(gradle)println("[Gradle生命周期] - 配置階段完成")}@Overridevoid buildFinished(BuildResult result) {super.buildFinished(result)println("[Gradle生命周期] - 構建結束")}
})

執行效果
在這里插入圖片描述

從執行結果可以看出,初始化階段主要是執行 setting.gradle 文件。

2、配置階段

  • 配置階段主要是執行各個目錄下的 build.gradle 文件,并且根據項目的配置去構建一個任務依賴的關系圖,以便在執行階段執行

在根目錄的build.gradle文件末尾添加

println("[Gradle生命周期] - 我是根目錄build.gradle")

在app目錄的build.gradle文件末尾添加

println("[Gradle生命周期] - 我是app目錄build.gradle")

執行結果

在這里插入圖片描述
可以看到,初始化完成之后,便依次執行各個目錄中的build.gradle

3、執行階段

  • 主要負責把配置階段生成的 任務依賴圖 依次去執行

在 app 目錄的 build.gradle 末尾添加

println("[Gradle生命周期] - 我是app目錄build.gradle")task testTask(){doLast {println("[Gradle生命周期] - 我是app目錄build.gradle中的testTask")}
}

執行命令

./gradlew :app:testTask -q

執行結果

在這里插入圖片描述

可以看到,配置階段完成后,便開始執行 task

4、Gradle構建過程中,幾個重要角色

階段角色
初始化階段rootProject
配置階段project
執行階段task
  • 初始化階段,主要是執行 setting.gradle,可以在setting.gradle中拿到 rootProject,并且之后的階段都可以使用 rootProject
  • 配置階段,就可以拿到所有子工程的project實例了
  • 執行階段,task是Gradle構建中執行的最小單元,我們所有的構建、編譯、打包,都是有一個個task組成的,一個project中可以有多個task,task之間還可以相互依賴的

在setting.gradle中添加

println("[Gradle生命周期] - 我是 setting.gradle")
//初始化階段可以拿到 rootProject
println("[Gradle生命周期] - rootProject路徑:${rootProject.projectDir}")//Gradle構建生命周期監聽
gradle.addBuildListener(new BuildAdapter() {@Overridevoid settingsEvaluated(Settings settings) {super.settingsEvaluated(settings)println("[Gradle生命周期] - 初始化階段完成")}@Overridevoid projectsEvaluated(Gradle gradle) {super.projectsEvaluated(gradle)println("[Gradle生命周期] - 配置階段完成")//配置階段可以拿到projectgradle.rootProject.childProjects.each {name, pro->println("[Gradle生命周期] - 子工程{ 名稱:$name    路徑:${pro.projectDir} }")}}@Overridevoid buildFinished(BuildResult result) {super.buildFinished(result)println("[Gradle生命周期] - 構建結束")}
})

在app目錄下的build.gradle添加

println("[Gradle生命周期] - 我是app目錄build.gradle")
//配置階段可以拿到project
println("[Gradle生命周期] - {  工程名:${project.name}   工程路徑:${project.projectDir}  }")
//project可以拿到很多參數,如父工程,任務等,可以點擊查看源碼
println("[Gradle生命周期] - {  父工程:${project.parent.name}   父工程路徑:${project.parent.projectDir}  }")
project.tasks.each {println("[Gradle生命周期] - app子工程中的任務:{  任務名:${it.name}   任務路徑:${it.path}")
}

在根目錄子的build.gradle添加

println("[Gradle生命周期] - 我是根目錄build.gradle")
//配置階段可以拿到project
println("[Gradle生命周期] - {  工程名:${project.name}   工程路徑:${project.projectDir}  }")
//project可以拿到很多參數,如任務等,可以點擊查看源碼
project.tasks.each {println("[Gradle生命周期] - 根目錄工程中的任務:{  任務名:${it.name}   任務路徑:${it.path}")
}

執行結果
在這里插入圖片描述

在這里插入圖片描述

補充:創建任務

在 app目錄的build.gradle中添加

task testTask1() {doLast {println("[Gradle生命周期] - 我是app目錄build.gradle中的testTask1")}
}task testTask2() {//testTask2依賴testTask1dependsOn testTask1doLast {println("[Gradle生命周期] - 我是app目錄build.gradle中的testTask2")}
}

執行命令

./gradlew :app:testTask2 -q

執行結果

在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/35783.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/35783.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/35783.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

SpringBoot優點達項目實戰:獲取系統配置接口(三)

SpringBoot優點達項目實戰:獲取系統配置接口(二) 文章目錄 SpringBoot優點達項目實戰:獲取系統配置接口(二)1、查看接口2、查看數據庫3、代碼實現1、創建實體類SysConfig2、創建返回數據的vo3、創建control…

【INTEL(ALTERA)】Eclipse Nios II SBT 無法從模板創建新應用程序和 BSP

目錄 說明 解決方法 說明 您應該能夠創建新的應用程序和 BSP 模板包含以下步驟: 選擇 Nios II應用程序和 BSP 來自模板。選擇您的.sopcinfo 文件并選擇模板。從您的工作區單擊 選擇現有的 BSP 項目。單擊 創建。選擇所需的 BSP 選項。單擊 完成。 但是&#xf…

API 安全策略和基礎指南

API 是當今數字創新計劃的核心,已成為應用程序的頭號攻擊載體。了解什么是 API 安全、為什么它如此重要,以及如何保護您的 API 免受現代威脅至關重要。 什么是 API 安全? 應用程序編程接口(API)是現代應用程序的基石…

PostgreSQL教程:開啟您的數據庫之旅

PostgreSQL教程:開啟您的數據庫之旅 PostgreSQL是一種開源的對象關系型數據庫管理系統(ORDBMS),它以其強大的功能、穩定性和高度的可擴展性而聞名。作為一個功能豐富的數據庫系統,PostgreSQL支持復雜的查詢、強大的事…

Python 面試題解析

Python 面試題解析 Python 作為一種廣泛使用的編程語言,其面試題目通常覆蓋了語言基礎、數據結構、算法、設計模式、Web 開發、測試、數據庫、系統設計等多個方面。以下是一些常見的 Python 面試題及其解析,使用 Markdown 格式編寫。 1. Python 基礎 …

Linux-筆記 OverlayFS文件系統小應用

前言 通過另一章節 OverlayFS文件系統入門 中已經大致了解了原理,這里來實現一個小應用。

大模型性能優化KV Cache

原理 KV Cache的本質就是避免重復計算,把需要重復計算的結果進行緩存,生成式模型的新的token的產生需要用到之前的所有token的 K , V K,V K,V,在計算注意力的時候是當前的 Q Q Q和所有的 K , V K,V K,V來進行計算,所以是緩存 K ,…

打破數據分析壁壘:SPSS復習必備(九)

有序定性資料統計推斷 1.分類 單向有序行列表 雙向有序屬性相同行列表 雙向有序屬性不同行列表 2.單向有序行列表 秩和檢驗 ① 兩組單向有序分類資料 ②多組單向有序定性資料 步驟: 1.建立檢驗假設和確定檢驗水準 2.編秩 3.求秩和 4.確定檢驗統計量 5…

按位與、或、異或操作符

目錄 & --- 按位與操作符 按位與操作符運用規則 按位與操作符相關代碼 按位與操作符相關代碼驗證 | --- 按位或操作符 按位或操作符運用規則 按位或操作符相關代碼 按位或操作符相關代碼驗證 ^ --- 按位異或操作符 按位異或操作符運用規則 按位異或操作符相關代…

分頁組件 vue/uniapp

失效如上圖 1.父組件調用 <onion-pagination :page.sync="todusGameQuery.pageSize" @update:page="changeTodusLoadMore":pageSize="todusGameQuery.pageNum" :total="todusGameTotal"></onion-pagination> 2.組件封裝…

海納斯 hinas 的hi3798mv100 華為悅盒 6108v9 安裝wifi模塊

hi3798mv100安裝wifi模塊 1.執行腳本 &#xff0c;執行完畢后重啟服務器2. 繼續執行腳本3.檢查網卡驅動安裝是否正確4.查看網卡安裝狀態5.連接wifi結尾 1.執行腳本 &#xff0c;執行完畢后重啟服務器 bash <(curl -sSL https://gitee.com/xjxjin/scripts/raw/main/install_…

【開源項目】自然語言處理領域的明星項目推薦:Hugging Face Transformers

在當今人工智能與大數據飛速發展的時代&#xff0c;自然語言處理&#xff08;NLP&#xff09;已成為推動科技進步的重要力量。而在NLP領域&#xff0c;Hugging Face Transformers無疑是一個備受矚目的開源項目。本文將從項目介紹、代碼解釋以及技術特點等角度&#xff0c;為您深…

Leetcode Hot100之矩陣

1. 矩陣置零 題目描述 給定一個 m x n 的矩陣&#xff0c;如果一個元素為 0 &#xff0c;則將其所在行和列的所有元素都設為 0 。請使用 原地 算法。 解題思路 題目要求進行原地更改&#xff0c;也就是不能使用額外的空間&#xff0c;因此我們可以使用第一行的元素來記錄對應的…

Java SpringBoot 打包后 獲取文件 打包后找不到文件 解決方法

在SpringBoot下 本地運行獲取項目下的文件是沒問題的&#xff0c;在打包后獲取則找不到文件 原因&#xff1a; 在Spring Boot項目中&#xff0c;當嘗試訪問項目下的文件時&#xff0c;本地開發環境和打包后的運行環境可能會有所不同。在本地開發時&#xff0c;通常可以直接通過…

Python自動造波器橢圓曲線波孤子解

&#x1f3af;要點 &#x1f3af;快速傅立葉變換算法周期域解橢圓曲線波 | &#x1f3af;算法數值解孤波脈沖和結果動畫 | &#x1f3af;三種語言孤子解淺水表面波方程 | &#x1f3af;漸近分解算法孤子波 | &#x1f3af;自適應步長算法孤子波 | &#x1f3af;流體自動造波器…

基于STM32的智能家庭安防系統

目錄 引言環境準備智能家庭安防系統基礎代碼實現&#xff1a;實現智能家庭安防系統 4.1 數據采集模塊4.2 數據處理與分析4.3 控制系統實現4.4 用戶界面與數據可視化應用場景&#xff1a;家庭安防管理與優化問題解決方案與優化收尾與總結 1. 引言 智能家庭安防系統通過使用ST…

終端基本指令使用不了

當你修改了~/.zshrc文件后發現像ls、vim這樣的基本命令無法使用&#xff0c;這通常意味著你的PATH環境變量可能被錯誤地修改或覆蓋了&#xff0c;導致shell無法找到這些命令的可執行文件。以下是幾個可能的原因和解決方法&#xff1a; PATH變量被錯誤修改&#xff1a; 確認你沒…

利用flex來布局頂部菜單欄

安裝vscode插件 css peek&#xff1a;快速定位到css定義的位置 微軟的live preview 替換live server 因為這個好像不支持utf8 前置css知識 span標簽是一個行內容器&#xff0c;用于標記文本的一部分&#xff0c;或文檔的一部分。它與 div 非常相似&#xff0c;但 div 是塊級…

數據結構——帶頭雙向循環鏈表(c語言實現)

目錄 1.單鏈表和雙向鏈表對比 2.雙向鏈表實現 2.1 創建新節點 2.2 鏈表初始化 2.3 尾插 2.4 頭插 2.5 尾刪 2.6 頭刪 2.7 查找 2.8 指定位置后插入數據 2.9 刪除指定節點 2.10 銷毀鏈表 2.11 打印鏈表 前言&#xff1a; 我們在前幾期詳細地講解了不帶頭單…

vue下載本地xls模版靜態文件

需求導入的下載模版不想放在服務器放在前端本地下載靜態資源最簡單的方式直接訪問 public 文件夾下的文件 方法一&#xff1a;使用靜態文件路徑 將文件放在 public 文件夾中&#xff1a; 把你的文件從 src/assets 移動到 public 文件夾。例如&#xff1a;public/template.xls。…