鍍金池/ 教程/ 物聯(lián)網(wǎng)/ Gradle包裝器
依賴管理實(shí)戰(zhàn)
配置遠(yuǎn)程倉(cāng)庫(kù)
安裝Gradle
簡(jiǎn)介
項(xiàng)目自動(dòng)化簡(jiǎn)介
配置子項(xiàng)目
Gradle強(qiáng)大的特性
自動(dòng)化測(cè)試
簡(jiǎn)介
掌握構(gòu)建生命周期
使用命令行操作
構(gòu)建Java項(xiàng)目
管理任務(wù)
構(gòu)建工具
連續(xù)傳遞的特性
用Gradle開發(fā)Web項(xiàng)目
聲明依賴
構(gòu)建塊
簡(jiǎn)介
測(cè)試Java應(yīng)用
java構(gòu)建工具
為什么選擇Gradle
拆分項(xiàng)目文件
單元測(cè)試
多項(xiàng)目打包
Gradle 起步
介紹這個(gè)Gradle項(xiàng)目
簡(jiǎn)介
自定義腳本
Gradle包裝器
簡(jiǎn)要概述依賴管理
項(xiàng)目模塊化

Gradle包裝器

你把你的Web應(yīng)用給你的同伴Mike看,他看完之后覺得很有意思想加入你給項(xiàng)目添加一些高級(jí)特性。你把代碼添加到版本控制系統(tǒng)當(dāng)中(VCS),因此它可以下載代碼,由于Mike從來沒有用過Gradle構(gòu)建工具,所以他問你用的哪個(gè)版本的Gradle以及怎么安裝Gradle,他也不知道怎么去配置Gradle,從以往的經(jīng)驗(yàn)來看,Mike清醒的知道不同版本的構(gòu)建工具或者運(yùn)行環(huán)境對(duì)對(duì)構(gòu)建的影響有多大。對(duì)于在一個(gè)機(jī)器上可以運(yùn)行,另一個(gè)機(jī)器無法運(yùn)行的情況他看的太多了,經(jīng)常是由于運(yùn)行時(shí)環(huán)境不兼容的原因。

對(duì)于這個(gè)問題Gradle提供了一個(gè)非常方便和實(shí)用的方法:Gradle包裝器,包裝器是Gradle的一個(gè)核心特性,它允許你的機(jī)器不需要安裝運(yùn)行時(shí)就能運(yùn)行Gradle腳本,而且她還能確保build腳本運(yùn)行在指定版本的Gradle。它會(huì)從中央倉(cāng)庫(kù)中自動(dòng)下載Gradle運(yùn)行時(shí),解壓到你的文件系統(tǒng),然后用來build。終極目標(biāo)就是創(chuàng)建可靠的、可復(fù)用的、與操作系統(tǒng)、系統(tǒng)配置或Gradle版本無關(guān)的構(gòu)建。

配置Gradle包裝器

在設(shè)置你的包裝器之前,你需要做兩件事情:創(chuàng)建一個(gè)包裝任務(wù),執(zhí)行這個(gè)任務(wù)生成包裝文件。為了能讓你的項(xiàng)目下載壓縮的Gradle運(yùn)行時(shí),定義一個(gè)Wrapper類型的任務(wù) 在里面指定你想使用的Gradle版本:

    task wrapper(type: Wrapper) {
        gradleVersion = '1.7'
    }

然后執(zhí)行這個(gè)任務(wù):

    $ gradle wrapper
    :wrapper

整個(gè)過程如下圖:

http://wiki.jikexueyuan.com/project/gradleIn-action/images/dag21.png" alt="" />

執(zhí)行完之后,你就能看到下面這個(gè)wrapper文件和你的構(gòu)建腳本:

http://wiki.jikexueyuan.com/project/gradleIn-action/images/dag22.png" alt="" />

記住你只需要運(yùn)行g(shù)radle wrapper一次,以后你就能用wrapper來執(zhí)行你的任務(wù),下載下來的wrapper文件會(huì)被添加到版本控制系統(tǒng)中。如果你的系統(tǒng)中已經(jīng)安裝了Gradle運(yùn)行時(shí),你就不需要再添加一個(gè)gradle wrapper任務(wù),你可以直接運(yùn)行g(shù)radle wrapper任務(wù),這個(gè)任務(wù)會(huì)使用你的Gradle當(dāng)前版本來生成包裝文件。

使用包裝器

上面生成了兩個(gè)執(zhí)行腳本,一個(gè)是運(yùn)行在*nix系統(tǒng)上的gradlew,另一個(gè)是運(yùn)行在Windows系統(tǒng)上的gradlew.bat,你只需要根據(jù)你的系統(tǒng)環(huán)境來執(zhí)行對(duì)應(yīng)的那一個(gè)腳本,比如上面提到的Mike執(zhí)行了gradlew.bat jettyRun任務(wù),下面是輸出:

    > gradlew.bat jettyRun

    Downloading http://services.gradle.org/distributions/gradle-1.7-bin.zip
    ...
    //Unzips compressed wrapper file to predefined local directory
    Unzipping C:\Documents and Settings\Mike\.gradle\wrapper\dists\gradle-1.7- bin\35oej0jnbfh6of4dd05531edaj\gradle-1.7-bin.zip to C:\Documents andSettings\Mike\.gradle\wrapper\dists\gradle-1.7-bin\35oej0jnbfh6of4dd05531edaj

    Set executable permissions for: C:\Documents and Settings\Mike\.gradle\wrapper\dists\gradle-1.7- bin\35oej0jnbfh6of4dd05531edaj\gradle-1.7\bin\gradlew.bat  

    :compileJava
    :processResources UP-TO-DATE
    :classes

    > Building > :jettyRun > Running at http://localhost:9090/todo

整個(gè)過程如下:

http://wiki.jikexueyuan.com/project/gradleIn-action/images/dag23.png" alt="" />

自定義包裝器

一些公司的安全措施非常嚴(yán)格,特別是當(dāng)你給政府工作的時(shí)候,你能夠訪問外網(wǎng)的能力是被限制的,在這種情況下你怎么讓你的項(xiàng)目使用Gradle包裝器?所以你需要修改默認(rèn)配置:

    task wrapper(type: Wrapper) {
        //Requested Gradle version
        gradleVersion = '1.2'
        //Target URL to retrieve Gradle wrapper distribution
        distributionUrl = 'http://myenterprise.com/gradle/dists'
        //Path where wrapper will be unzipped relative to Gradle home directory
        distributionPath = 'gradle-dists'        
    }

非常直接明顯對(duì)不對(duì)?你還可以了解更多的特性,如果你想了解更多關(guān)于Gradle包裝器DSL的信息,可以查看這個(gè)網(wǎng)址:http://gradle.org/docs/current/dsl/org.gradle.api.tasks.wrapper.Wrapper.html