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

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

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

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

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

    1. 基本概念(Project 和 Task)

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


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

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

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

     這個(gè)構(gòu)建的腳本很簡單,就是輸出hello world。為了運(yùn)行這個(gè)構(gòu)建,我們應(yīng)該在當(dāng)前目錄下執(zhí)行 "gradle hello",即gradle TaskName。
    doLast意思是定義一個(gè)行為(映射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"
    }

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

     


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

    評(píng)論

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

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

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

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

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

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

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

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

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

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

    公告


    導(dǎo)航

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

    統(tǒng)計(jì)

    常用鏈接

    留言簿(13)

    我參與的團(tuán)隊(duì)

    隨筆分類(69)

    隨筆檔案(68)

    最新隨筆

    搜索

    積分與排名

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: 97精品免费视频| 亚洲人成在线中文字幕| 久久久久久久91精品免费观看| h视频免费高清在线观看| 亚洲av无码片区一区二区三区| 国精无码欧精品亚洲一区| 国产小视频免费观看| 成人影片麻豆国产影片免费观看| 久草免费福利视频| CAOPORM国产精品视频免费| 亚洲精品理论电影在线观看| 久久亚洲中文字幕精品有坂深雪| 国产精品亚洲αv天堂无码 | 亚洲综合av永久无码精品一区二区| 亚洲欧洲免费无码| 四虎国产精品永久免费网址| a级毛片免费网站| 男女猛烈激情xx00免费视频 | 成人免费毛片视频| 无码区日韩特区永久免费系列| 久久国产精品免费专区| 免费无码av片在线观看| 一级毛片完整版免费播放一区| 激情小说亚洲色图| 亚洲国产成人无码AV在线| 亚洲中文字幕一区精品自拍| 亚洲人成电影在线观看青青| 亚洲春色另类小说| 亚洲精品成人网站在线播放| 久久狠狠高潮亚洲精品| 久久久久久亚洲精品成人| 亚洲国产天堂久久综合网站| 久久久久亚洲精品日久生情| 亚洲资源在线观看| 亚洲高清资源在线观看| 亚洲精品美女久久久久| 亚洲的天堂av无码| 亚洲av无码一区二区三区天堂古代| 亚洲伦理一二三四| 激情五月亚洲色图| 亚洲国产成人综合精品|