看懂Gradle腳本(5)- 跟Gradle學領域驅動設計

領域驅動設計(DDD)

如果第一次聽說領域驅動設計,那麼趕緊買一本,或借一本Eric Evans寫的那麼同名經典書補一下課。Gradle是一個自動化build工具,所以Gradle面對的領域就是自動化構建這一領域。Gradle是按照DDD的思想設計和開發的,所以自動化構建領域裏的大部分概念,在Gradle的源代碼裏都有一個接口或類與之對應。本文介紹對Gradle新手來說最重要的三個領域對象:ProjectTaskAction

Project

Project是Gradle最重要的一個領域對象,我們寫的build.gradle腳本的全部作用,其實就是配置一個Project實例。在build.gradle腳本里,我們可以隱式的操縱Project實例,比如,apply插件、聲明依賴、定義Task等,如下所示:

apply plugin: 'groovy'
dependencies {
  compile "org.eclipse.jetty.aggregate:jetty-all:9.1.3.v20140225"
}
task myTask {
  // ...
}
apply、dependencies、task等實際上是Project的方法,參數是一個代碼塊。如果需要,也可以顯示的操縱Project實例,比如:

project.ext.myProp = 'myValue'

Task

Gradle的Task等同於AntTarget。在內部,Task被組織成了一個有向無環圖(DAG)。Gradle保證Task按照依賴順序執行,並且每個Task最多隻被執行一次。當我們看到下面這段腳本的時候,只要明白兩點就可以了:

task myTask {
  // ...
}

  1. 給Project添加一個名爲“myTask”的任務
  2. 用一個閉包來配置這個任務

在閉包中,我們可以充分利用Gradle提供的DSL來配置任務,比如,給任務添加Action

Action

Task可以包含n個Action,Task提供了doFirstdoLast方法來給自己添加Action,如下所示:

task myTask {
    doFirst {
        println 'hello'
    }
    doLast {
        println 'world'
    }
}
還提供了<<運算符,如下所示:

task myTask << {
    println 'hello world'
}

結論

build.gradle腳本的真正作用,就是配置一個Project實例。在執行build腳本之前,Gradle會爲我們準備好一個Project實例,執行完腳本之後,Gradle會按照DAG依次執行任務。

發佈了61 篇原創文章 · 獲贊 72 · 訪問量 43萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章