<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

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

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

    1. 基本概念(Project 和 Task)

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


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

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

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

     這個構建的腳本很簡單,就是輸出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:

     

    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真的很強大哦!

     


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

    評論

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

    希望你繼續寫下去,持續關注你。。。  回復  更多評論   

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

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

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

    gradle 可以像maven那樣創建模板工程? 命令是什么樣的?  回復  更多評論   

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

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

    # re: 從零開始學習Gradle之一---初識Gradle 2014-05-28 14:31 julie

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

    公告


    導航

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

    統計

    常用鏈接

    留言簿(13)

    我參與的團隊

    隨筆分類(69)

    隨筆檔案(68)

    最新隨筆

    搜索

    積分與排名

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲精品亚洲人成在线观看麻豆| 日本19禁啪啪无遮挡免费动图| 亚洲性日韩精品国产一区二区| 亚洲精品无码高潮喷水A片软| 成人看的午夜免费毛片| 亚洲videos| 午夜两性色视频免费网站| 亚洲中文字幕无码爆乳app| 成年18网站免费视频网站| 亚洲色偷偷色噜噜狠狠99网| 日本二区免费一片黄2019| 亚洲AV成人无码久久WWW| 免费a级毛片无码a∨性按摩| 无码AV动漫精品一区二区免费| 久久精品国产亚洲7777| 女人隐私秘视频黄www免费| 亚洲嫩模在线观看| 免费视频爱爱太爽了| 亚洲av永久无码精品秋霞电影秋 | 亚洲国产美女精品久久久| 国产高清在线免费视频| 亚洲免费一区二区| 亚洲黄色高清视频| 免费观看美女裸体网站| www一区二区www免费| 亚洲精品在线免费观看| 日韩电影免费在线观看视频 | 亚洲伊人久久精品| 国产免费观看青青草原网站| 怡红院免费全部视频在线视频| 久久国产亚洲高清观看| 日本无吗免费一二区| 中文字幕久无码免费久久| 亚洲国产精品久久人人爱| mm1313亚洲国产精品美女| 性xxxx视频免费播放直播| 亚洲日韩精品无码专区加勒比| 中文亚洲成a人片在线观看| **aaaaa毛片免费| 未满十八私人高清免费影院| 亚洲人成777在线播放|