從零開始學(xué)習(xí)Gradle之一---初識Gradle

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

          1. 基本概念(Project 和 Task)

          Gradle中有兩個基本的概念:project和task。每個Gradle的構(gòu)建由一個project構(gòu)成,它代表著需要被構(gòu)建的組件或者構(gòu)建的整個項目。每個project由一個或者多個task組成。task代表著Gradle構(gòu)建過程中可執(zhí)行的最小單元。例如當(dāng)構(gòu)建一個組件時,可能需要先編譯、打包、然后再生成文檔或者發(fā)布等,這其中的每個步驟都可以定義成一個task。


          2. 構(gòu)建第一個Task
          和Ant運行時讀取build.xml類似,Gradle運行時默認(rèn)會讀取build.gradle這個文件, 當(dāng)然你也可以使用參數(shù)"-b"來指定其他的xxx.gradle

          下面,讓我們新建一個build.gradle文件,然后輸入如下內(nèi)容:

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

           這個構(gòu)建的腳本很簡單,就是輸出hello world。為了運行這個構(gòu)建,我們應(yīng)該在當(dāng)前目錄下執(zhí)行 "gradle hello",即gradle TaskName。
          doLast意思是定義一個行為(映射Gradle中的Action類),放在當(dāng)前task的最后,類似的,還有doFirst, 表示將定義的行為放在當(dāng)前task最前面,例如

          task hello {
            doLast{
                println "Hello world"
              }   
            doFirst{
                println "I am xxx"
              }   
          }
          執(zhí)行g(shù)radle hello, 將輸出
          "I am xxx"
          "Hello world"

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

           

          task hello <<  {
               println "hello world"
          }

          這里也許大家可能會覺得很奇怪,為什么可以用"<<"來定義Task的執(zhí)行內(nèi)容呢,還是讓我們看看Gradle的代碼是怎么實現(xiàn)的吧:

           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,當(dāng)使用doFirst或者doLast時,實際上是將定義的執(zhí)行部分實例化成Action的對象,然后添加到actions集合里。
          明白了這一點,接下來讓我們看看為什么可以使用<<定義Task--------Groovy作為強(qiáng)大的支持DSL的動態(tài)語言,早已經(jīng)重載了 << 操作符,使得我們可以方便的使用<<向集合添加元素。
          說道這,相信真相已經(jīng)大白了:原來就是使用Groovy的特性,往集合里添加Action而已。對,這就是Gradle的語法,利用Groovy的DSL特性,幫助我們更容易的定義我們的構(gòu)建腳本。
          不過也許大家會覺得,這個例子實在是沒有什么代表性,只是一個簡單的 hello world,說明不了什么問題。好吧,別著急,下次我們會繼續(xù)研究Gradle的其他部分,不過先記住:作為一個構(gòu)建工具,Gradle真的很強(qiáng)大哦!

           


          posted on 2012-06-27 15:32 想飛就飛 閱讀(30977) 評論(5)  編輯  收藏 所屬分類: J2EEGroovy/Grails

          評論

          # re: 從零開始學(xué)習(xí)Gradle (一) 2012-06-29 09:35 melin

          希望你繼續(xù)寫下去,持續(xù)關(guān)注你。。。  回復(fù)  更多評論   

          # re: 從零開始學(xué)習(xí)Gradle (一) 2012-06-29 11:31 想飛就飛

          謝謝鼓勵啊,兄弟!也希望能位Gradle的發(fā)展添磚加瓦了  回復(fù)  更多評論   

          # re: 從零開始學(xué)習(xí)Gradle (一) 2012-06-29 11:49 melin

          gradle 可以像maven那樣創(chuàng)建模板工程? 命令是什么樣的?  回復(fù)  更多評論   

          # re: 從零開始學(xué)習(xí)Gradle (一) 2012-06-29 15:34 想飛就飛

          @melin
          據(jù)我所知,Gradle目前還不行,也許以后會有Plugin做這個事情 :)。按我的理解,Gradle是基于DSL的一種構(gòu)建工具,它的理念不是像Maven那樣為你制定好標(biāo)準(zhǔn)流程或者模版。實際上,也正因為如此,Gradle提供了更好的靈活性,你可以使用它來完成任何事情,不僅僅是構(gòu)建,因為所有的task都完全由Groovy代碼來控制,你也可以實現(xiàn)一個這樣創(chuàng)建工程模版的task。
          Maven,從項目管理的角度考慮,還是做的不錯,但被人詬病最多的就是它那單一的對象模型,因為它制定了一套看似標(biāo)準(zhǔn)的流程,對于基本的應(yīng)用,Maven也許更方便,但隨著項目的復(fù)雜度增加,它很難擴(kuò)展而且XML的可讀性會很差。按照我目前的理解,我只能回答這么多,不過我們可以繼續(xù)探討,呵呵!  回復(fù)  更多評論   

          # re: 從零開始學(xué)習(xí)Gradle之一---初識Gradle 2014-05-28 14:31 julie

          寫的通俗易懂,由淺入深,很感謝!  回復(fù)  更多評論   

          公告


          導(dǎo)航

          <2012年6月>
          272829303112
          3456789
          10111213141516
          17181920212223
          24252627282930
          1234567

          統(tǒng)計

          常用鏈接

          留言簿(13)

          我參與的團(tuán)隊

          隨筆分類(69)

          隨筆檔案(68)

          最新隨筆

          搜索

          積分與排名

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 南溪县| 英超| 彭水| 策勒县| 永和县| 鱼台县| 鄢陵县| 闽侯县| 延津县| 宁晋县| 赣榆县| 上饶市| 许昌县| 枣庄市| 房产| 理塘县| 乌兰浩特市| 蒙自县| 通河县| 东源县| 大埔区| 甘南县| 安西县| 康平县| 会同县| 简阳市| 大石桥市| 綦江县| 西宁市| 盐山县| 左权县| 依兰县| 包头市| 石楼县| 九台市| 会宁县| 琼结县| 新泰市| 任丘市| 高要市| 梨树县|