天天看點

gradle使用文檔1     基本介紹2     安裝和使用3     開始一個例子4     gradle基本概念介紹5     常用的task介紹

gradle能夠完成建構、測試、釋出和其他諸如軟體打包、生成注釋文檔等等功能。

其特點包括:

l  使用簡單

l  支援多方式依賴管理

l  與ant、maven和ivy有良好的相容,支援輕松地從其他建構方式遷移到gradle上

l  支援局部建構

l  支援多工程的建構

l  免費開源

官方網站上面可以下載下傳到各種版本,以及文檔、和論壇等。目前gradle的最新版本為2.0.

gradle的安裝方法很簡單,将解壓後的gradle的bin目錄加到path目錄即可。如下圖所示:

gradle使用文檔1     基本介紹2     安裝和使用3     開始一個例子4     gradle基本概念介紹5     常用的task介紹

其中,gradle_home目錄為我們解壓gradle下載下傳包的目錄。

為了驗證我們的gradle是否安裝成功。我們可以執行指令gradle–v加以驗證。如下圖所示:

gradle使用文檔1     基本介紹2     安裝和使用3     開始一個例子4     gradle基本概念介紹5     常用的task介紹

通過eclipse向導建立一個java project工程。工程如下:

gradle使用文檔1     基本介紹2     安裝和使用3     開始一個例子4     gradle基本概念介紹5     常用的task介紹

建立一個com.sina.landp的package,然後在其下面建立一個helloworld類,代碼如下:

package com.sina.landp;

public class helloworld {

   public static void main(string[] args) {

      system.out.println("hello world!");

   }

}

以上是一個java入門級的類。

再編寫build.gradle在我們的工程目錄下(如上圖所示)。代碼如下:

apply plugin: 'java'

在工程所在的目錄下,打開cmd,運作gradle build指令,并執行。執行結果如下:

gradle使用文檔1     基本介紹2     安裝和使用3     開始一個例子4     gradle基本概念介紹5     常用的task介紹

通過上面的執行日志,我們可以看到,我們的工程大緻經過了編譯、運作測試案例、建構這幾個大過程。

同時,我們在工程的目錄下,發現新生成了一個build的目錄,目錄内容如下:

gradle使用文檔1     基本介紹2     安裝和使用3     開始一個例子4     gradle基本概念介紹5     常用的task介紹

根據目錄名稱,我們也能大概猜到裡邊存放的内容。

特别地,我們可以在libs目錄下,找到demo-gradle.jar。

在reports目錄下存放了一個html,我們用浏覽器打開後,其内容如下:

gradle使用文檔1     基本介紹2     安裝和使用3     開始一個例子4     gradle基本概念介紹5     常用的task介紹

正如其标題所示,該頁面反映了我們的單元測試案例結果。

ok,正如你看到的一樣,gradle建構就這麼簡單。我們這裡僅用了一行代碼,就完成了一個java工程的基本建構。

gradle建構過程,邏輯上都基于兩個基本的概念,projects和tasks。

一個project應該指出最終要生成的内容,例如要生成一個jar、要建構出一個war等等。為了實作最終的目的,我們要通過一個或多個任務來完成。任務即tasks。

一個task可以了解為建構的一個步驟,例如編譯java檔案為class。task是原子操作。task和ant非常相像。

我們現在嘗試一些常用的task,并運作起來看看結果。

剛開始,我們還是來一個hello world。

在我們自己的電腦的檔案目錄上,建立一個build.gradle的檔案,檔案内容為:

task hello{println 'hello world'}

此時通過cmd到該檔案所在的目錄下,此時在cmd上執行指令:

gradle hello

我們可以得到以下結果:

gradle使用文檔1     基本介紹2     安裝和使用3     開始一個例子4     gradle基本概念介紹5     常用的task介紹

很顯然,我們的任務已經被正确調用并執行。

另外,gradle的task也支援這種寫法:

task hello << {println 'hello world'}

執行結果和上面一樣的。

修改build.gradle,内容改為:

task intro (dependson: hello) <<{println 'intro runs after hello'}

運作gradle intro指令,得到執行結果如下:

gradle使用文檔1     基本介紹2     安裝和使用3     開始一個例子4     gradle基本概念介紹5     常用的task介紹

task自帶了一些api接口,我們可以申明這些接口要執行的内容,進而插入我們要額外執行的内容。

修改build.gradle檔案内容如下:

task hello << {

    println 'hello earth' }

hello.dofirst {

    println 'hello venus' }

hello.dolast {

    println 'hello mars' }

hello << {

    println 'hello jupiter' }

運作指令,得到以下執行結果:

gradle使用文檔1     基本介紹2     安裝和使用3     開始一個例子4     gradle基本概念介紹5     常用的task介紹

注意dofirst中的内容首先被執行。

通過以上幾個簡單例子,我們對task已經有些認識了。我們現在來看看把這些任務綜合起來完成項目的建構。

也許,我們還記得,在第三章的例子中,我們僅用了一行代碼,即完成了對整個java工程的建構。代碼為:

從其執行的日志,我們可以看到,其實,該行指令帶來的結果是,gradle将一套完整的java建構工程的task全引入到了我們的建構過程中。重點是,這些引入都是正确的。

我們之前有說到,project就是多個task一起組合起來完成建構任務,并生成我們想要的内容。既然gradle幫我們已經引入了很多的task,那就意味着,我們隻需要再添加一些我們需要的task,就可以完成我們自己的項目的建構過程。

确實是這樣的。

接下來,我們做一點更有意義和難度的事情。我們項目裡要用到spring,現在需要搭建一個簡單的spring工程。那麼,第一件事,我們需要做的,就是把spring的jar下載下傳下來。

ok,修改demo-gradle工程的build.gradle檔案内容為:

apply plugin:'java'

repositories {

   mavencentral()

dependencies {

    compile'org.springframework:spring-context:4.0.5.release'

同樣地,在build.gradle所在目錄下,執行gradlebuild指令。可以說是奇迹發生了吧,得到執行結果如下:

gradle使用文檔1     基本介紹2     安裝和使用3     開始一個例子4     gradle基本概念介紹5     常用的task介紹

工程不但建構完成,還下載下傳了我們需要的spring的jar包。此時,如果回到eclipse中,發現下載下傳的jar并沒有被引入到工程中。

再在build.gradle中第二行添加一行:

apply plugin: 'eclipse'

之後,執行指令gradle eclipse,得到以下結果:

gradle使用文檔1     基本介紹2     安裝和使用3     開始一個例子4     gradle基本概念介紹5     常用的task介紹

回到eclipse中,重新整理工程,可以看到我們的jar已經被工程引用了。

最常見的,就是我們要指定編譯生成的jar基于jdk的版本。

修改build.gradle内容為:

sourcecompatibility = 1.6

targetcompatibility = 1.6

   compile 'org.springframework:spring-context:4.0.5.release'

以上兩個屬性的作用分别如下:

sourcecompatibility,指定編譯java源代碼的jdk版本;

targetcompatibility,指定生成的class檔案的jdk版本。

添加後執行gradle build指令,也會是成功的。

另外,以上兩個屬性,也是complejava的屬性。也可以寫成:

compilejava {

   sourcecompatibility = 1.6

   targetcompatibility = 1.6

在build.gradle中添加以下内容:

jar {

   manifest {

               attributes 'implementation-title':'demo gradle quickstart', 'implementation-version': 1.0

    }

執行完gradle build指令後,打開demo-gradle.jar中的manifest檔案,其内容如下所示:

gradle使用文檔1     基本介紹2     安裝和使用3     開始一個例子4     gradle基本概念介紹5     常用的task介紹

在工程中添加一個單元測試案例。如圖所示:

gradle使用文檔1     基本介紹2     安裝和使用3     開始一個例子4     gradle基本概念介紹5     常用的task介紹

helloworld.java檔案内容調整為:

package com.sina.landp;

public class helloworld {

      publicstatic void main(string[] args) {

             system.out.println("helloworld!");

      }

      publicstring sayhello(string name){

             return"hello " + name;

helloworldtest.java檔案内容如下:

import staticorg.junit.assert.assertequals;

import org.junit.before;

import org.junit.test;

public class helloworldtest {

      privatehelloworld helloworld;

      @before

      publicvoid setup(){

             helloworld= new helloworld();

      @test

      publicvoid should_ok_when_call_sayhello_given_a_name() {

             stringname = "andy";

             stringresp = helloworld.sayhello(name);

             stringexpected = "hello andy";

             assertequals(expected,resp);

當然,在我們建立”junit test case”時,eclipse就會要求我們添加junit的依賴包。此時,我們的helloworldtest可以正常運作。

為了使得gradle能正常運作,我們需要修改build.gradle檔案内容如下:

 dependencies{

   testcompile "junit:junit:4.11"

運作gradle build指令,可以看到成功執行。

修改build.gradle檔案,添加内容:

apply plugin: "war"

我們可以通過jetty快速地運作起來我們的工程。對jetty的配置,我們可以指定jetty服務端口号。

jettyrun {

   httpport = 9898

另外,和jar類似,可以對war這個task做一些配置。例如,指定哪些jar不用包含在war裡邊。對應的配置如下:

war {

   basename = 'depblog'

   rootspec.exclude("**/xxx.jar")

最後,我們可以通過gradle jettyrun來運作我們的web項目。

繼續閱讀