2018年8月8日 星期三

build 生命週期和監聽方法 (Gradle 4.x 一)

官網連結

.初始化階段:
Gradle 支持單項目和多項目構建
在初始化階段,Gradle 確定哪些項目將參與構建,並為每個項目創建一個 Project 實例

.設定階段:
在此階段,配置專案物件
將執行構建的所有專案的構建腳本
Gradle 1.4 引入了一種稱為按需配置的孵化選擇功能。在此模式下,Gradle 僅配置相關專案

.執行階段:
Gradle 確定要在執行期間創建和設定任務的子集,然後子集傳遞給 gradle 命令和當前目錄。最後 Gradle 執行每個選定的任務


其中設定的部分還有四種狀態,Internal、Incubating、Public、Deprecated,最後兩個大家都知道,就不說明了
官網連結

※Internal:
內部功能不是為公共使用而設計的,僅供Gradle本身使用
可以在任何時候以任何方式改變而不另行通知
所以,儘量避免使用此類功能
內部功能可能演變為公共功能

※Incubating:
孵化狀態下的功能可能會在將來的 Gradle 版本中發生變化,直到它不再孵化為止
孵化的所有方法/屬性/類都使用 @Incubating

gradle 預設 import 的套件非常多,看官網連結


this.gradle.addProjectEvaluationListener(new ProjectEvaluationListener() {
    @Override
    void beforeEvaluate(Project project) {
        println '無'
    }
    
    @Override
    void afterEvaluate(Project project, ProjectState projectState) {
        println '設定後,執行前1'
    }
})
    
this.gradle.addListener(new BuildListener() {
    @Override
    void buildStarted(Gradle gradle) {
        println '無'
    }
    
    @Override
    void settingsEvaluated(Settings settings) {
        println '無'
    }
    
    @Override
    void projectsLoaded(Gradle gradle) {
        println '無'
    }
    
    @Override
    void projectsEvaluated(Gradle gradle) {
        println '設定後,執行前4-1'
    }
    
    @Override
    void buildFinished(BuildResult buildResult) {
        println '生命週期完成1-2'
    }
})
    
this.gradle.addBuildListener(new BuildListener() {
    @Override
    void buildStarted(Gradle gradle) {
        println '無'
    }
    
    @Override
    void settingsEvaluated(Settings settings) {
        println '無'
    }
    
    @Override
    void projectsLoaded(Gradle gradle) {
        println '無'
    }
    
    @Override
    void projectsEvaluated(Gradle gradle) {
        println '設定後,執行前4-2'
    }
    
    @Override
    void buildFinished(BuildResult buildResult) {
        println '生命週期完成1-1'
    }
})
    
this.beforeEvaluate {
    println '無'
}
    
this.gradle.beforeProject {
    println '無'
}
    
this.afterEvaluate {
    println '設定後,執行前3'
}
    
this.gradle.afterProject {
    println '設定後,執行前2'
}
    
this.gradle.buildFinished {
    println '生命週期完成2'
}

※在 build.gradle 同層,有一個檔案叫 settings.gradle,再裡面寫 println,會發現它是最早印出來的,因為初始化就在這裡

沒有留言:

張貼留言