從零開始學習Gradle之一---初識Gradle

前提: 安裝Gradle。安裝過程很是簡單:
(1)下載Gradle
(2)將GRADLE_HOME/bin/gradle加入$PATH。

工具

1. 基本概念(Project 和 Task)gradle

Gradle 中有兩個基本的概念:project和task。每一個Gradle的構建由一個project構成,它表明着須要被構建的組件或者構建的整個項目。每一個 project由一個或者多個task組成。task表明着Gradle構建過程當中可執行的最小單元。例如當構建一個組件時,可能須要先編譯、打包、而後 再生成文檔或者發佈等,這其中的每一個步驟均可以定義成一個task。ui


2. 構建第一個Task
和Ant運行時讀取build.xml相似,Gradle運行時默認會讀取build.gradle這個文件, 固然你也可使用參數"-b"來指定其餘的xxx.gradlethis

下面,讓咱們新建一個build.gradle文件,而後輸入以下內容:spa

  task hello {
      doLast{
           println "hello world"
      }
 }xml

 這個構建的腳本很簡單,就是輸出hello world。爲了運行這個構建,咱們應該在當前目錄下執行 "gradle hello",即gradle TaskName。
doLast意思是定義一個行爲(映射Gradle中的Action類),放在當前task的最後,相似的,還有doFirst, 表示將定義的行爲放在當前task最前面,例如
對象

task hello {
  doLast{
      println "Hello world"
    }   
  doFirst{
      println "I am xxx"
    }   
}文檔

執行gradle hello, 將輸出
"I am xxx"
"Hello world"

另外,你也可使用以下更簡潔的方式來定義task:io

 

task hello <<  {
     println "hello world"
}編譯

這裏也許你們可能會以爲很奇怪,爲何能夠用"<<"來定義Task的執行內容呢,仍是讓咱們看看Gradle的代碼是怎麼實現的吧:

 1 public abstract class AbstractTask implements TaskInternal, DynamicObjectAware {
 2   private List<Action<? super Task>> actions = new ArrayList<Action<?   super Task>>();
 3 
 4   public Task doFirst(Action<? super Task> action) {
 5         if (action == null) {
 6             throw new InvalidUserDataException("Action must not be null!");
 7         }
 8         actions.add(0, wrap(action));
 9         return this;
10     }
11 
12    public Task doLast(Action<? super Task> action) {
13         if (action == null) {
14             throw new InvalidUserDataException("Action must not be null!");
15         }
16         actions.add(wrap(action));
17         return this;
18     }

從上面的代碼能夠看出,Task類裏有個Action的集合actions,當使用doFirst或者doLast時,其實是將定義的執行部分實例化成Action的對象,而後添加到actions集合裏。 明白了這一點,接下來讓咱們看看爲何可使用<<定義Task--------Groovy做爲強大的支持DSL的動態語言,早已經重載了 << 操做符,使得咱們能夠方便的使用<<向集合添加元素。說道這,相信真相已經大白了:原來就是使用Groovy的特性,往集合裏添加Action而已。對,這就是Gradle的語法,利用Groovy的DSL特性,幫助咱們更容易的定義咱們的構建腳本。不過也許你們會以爲,這個例子實在是沒有什麼表明性,只是一個簡單的 hello world,說明不了什麼問題。好吧,彆着急,下次咱們會繼續研究Gradle的其餘部分,不過先記住:做爲一個構建工具,Gradle真的很強大哦!

相關文章
相關標籤/搜索