Gradle初體驗

Windows下安裝Gradle

Gradle官方的安裝文檔,地址以下:java

https://gradle.org/install/web

1.Gradle是基於JVM的,因此首先須要確保已經安裝好了JDK,而我這裏是已經安裝好的了,官方文檔中表示目前最新版本的Gradle須要的JDK環境是1.7以上。我這裏用的是jdk10:
Gradle初體驗編程

2.到官網上下載Gradle,下載地址以下,我這裏下載的是二進制安裝包:vim

https://gradle.org/next-steps/?version=4.10&format=binapi

3.下載好後,解壓後目錄以下:
Gradle初體驗bash

  • bin目錄存放可執行文件
  • init.d目錄能夠存放構建腳本
  • lib目錄存放一些庫文件
  • media目錄存放的是一些圖標文件

4.配置環境變量:
Gradle初體驗閉包

在path中增長這個環境變量:
Gradle初體驗app

5.執行gradle查看版本命令,確認安裝成功:
Gradle初體驗框架


CentOS7下安裝Gradle

1.一樣的,須要確認安裝好了JDK環境,我這裏CentOS下使用的JDK版本是1.8:webapp

[root@01server ~]# java -version
java version "1.8.0_171"
Java(TM) SE Runtime Environment (build 1.8.0_171-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.171-b11, mixed mode)
[root@01server ~]#

2.到官網上獲取下載連接,而後下載並解壓Gradle,過程以下:

[root@01server ~]# cd /usr/local/src/
[root@01server /usr/local/src]# wget https://downloads.gradle.org/distributions/gradle-4.10-bin.zip
[root@01server /usr/local/src]# unzip gradle-4.10-bin.zip # 解壓
[root@01server /usr/local/src]# mv gradle-4.10 /usr/local/gradle  # 我這裏習慣放到/usr/local下

3.配置環境變量:

[root@01server ~]# vim /etc/profile  # 在文件末尾添加以下內容
export GRADLE_HOME=/usr/local/gradle
export PATH=$PATH:$GRADLE_HOME/bin
[root@01server ~]# source /etc/profile  # 使配置生效
[root@01server ~]#

4.執行gradle查看版本命令,確認安裝成功:
Gradle初體驗


groovy理論介紹

Groovy簡介:

Groovy是用於Java虛擬機的一種敏捷的動態語言,它是一種成熟的面向對象編程語言,便可以用於面向對象編程,又能夠用做純粹的腳本語言。使用該語言沒必要編寫過多的代碼,同時又具備閉包和動態語言中的其餘特性。

Groovy特色:

  • Groovy徹底兼容Java的語法
  • 分號是可選的
  • 類、方法默認是public的
  • 編譯器給屬性自動添加getter/setter方法
  • 屬性能夠直接用點號獲取
  • 最後一個表達式的值會被做爲返回值
  • == 等同於Java的equals(),而且不會有空指針異常

Groovy特性的高級特性:

  • 支持assert語句
  • 支持可選類型定義
  • 可選的括號
  • 支持三種字符串
  • 擁有集合API
  • 支持閉包

構建腳本介紹

什麼是構建塊:

Gradle構建中的兩個基本概念是項目(project)和任務(task),每一個構建至少包含一個項目,項目中包含一個或多個任務。在多項目構建中,一個項目能夠依賴於其餘項目;相似的,任務能夠造成一個依賴關係圖來確保他們的執行順序

什麼是項目(project):

一個項目表明一個正在構建的組件(好比一個jar文件),當構建啓動後,Gradle會基於build.gradle實例化一個org.gradle.api.Project類,而且可以經過project變量使其隱式可用。項目(project)主要的三個屬性分別是group、name、version,就比如於maven中的groupId、artifactId、version,是做爲組件的座標存在的

項目(project)比較重要的方法分別是plugins、repositories、dependencies、task,plugins用於添加插件,dependencies用於依賴管理,repositories用於指定倉庫,task用於聲明項目中的任務

什麼是任務(task):

任務(task)對應org.gradle.api.Task,主要包括任務動做和任務依賴。任務動做定義了一個最小的工做單元,能夠定義依賴於其餘任務、動做序列和執行條件

任務(task)比較重要的方法分別是dependsOn、doFirst、doLast ,dependsOn用於聲明任務依賴,任務也是一個動做列表,而doFirst用於在任務列表最前面添加一個動做,doLast則是用於在任務列表末尾添加一個動做,其中doLast能夠簡寫爲 <<

項目和任務的關係圖:
Gradle初體驗


groovy與java比較

本小節咱們用一個簡單的demo項目,來直觀的演示一下Java和groovy在語法上的區別。首先建立一個Gradle工程:
Gradle初體驗

自定義GroupId和ArtifactId:
Gradle初體驗

選擇本地的Gradle:
Gradle初體驗

項目建立好後,打開Gradle控制檯:
Gradle初體驗

咱們先來使用Java語法進行編寫,代碼及運行結果以下:
Gradle初體驗

若是使用groovy語法進行編寫的話,將會簡單不少。代碼及運行結果以下:
Gradle初體驗

groovy中經常使用的高級特性寫法示例:

// 1.可選類型定義
def version = 1

// 2.assert語句
assert version == 1

// 3.括號是可選的
println(version)
println version

// 4.字符串
// 單引號是純粹的字符串
def s1 = 'demo'
// 雙引號的字符串能夠插入變量
def s2 = "current version is ${version}"
// 多行字符串
def s3 = '''this
is a
demo'''

// 5.集合API
// 默認的類型是ArrayList
def list = ['a', 'b', 'c']
// list添加元素
list << 'd'

// 默認的類型是LinkedHashMap
def map = ['ant': 2000, 'maven': 2004]
// map添加元素
map.gradle = 2009

// 6.閉包
// 定義有參數的閉包
def c1 = {
    v ->
        println v
}
// 定義無參數的閉包
def c2 = {
    println 'hello'
}
// 定義使用閉包的方法
def method1(Closure closure) {
    closure('param')
}

def method2(Closure closure) {
    closure()
}

//調用使用閉包的方法,並將閉包對象傳遞進去
method1(c1)
method2(c2)

咱們利用以上所提到的高級特性語法來寫一個簡單的構建腳本,代碼以下:

// 在構建腳本中,默認都是有個Project實例的

// plugins 是Project裏的方法
plugins {
    id 'java'
}

// version是Project裏的屬性
version = '0.1'

// repositories是Project裏的方法,用於倉庫管理,這裏使用了有參數的閉包進行調用
repositories {
    mavenCentral()
}

// dependencies是Project裏的方法,用於依賴管理,這裏一樣使用了有參數的閉包進行調用
dependencies {
    compile 'commons-codec:commons-codec:1.6'
}

以上的代碼是一個比較常見的構建腳本,可是寫習慣Java語言的話,可能看不太懂,由於都忽略了括號。若不忽略括號,則代碼以下:

plugins({
    id 'java'
})

version = '0.1'

repositories({
    mavenCentral()
})

dependencies({
    compile 'commons-codec:commons-codec:1.6'
})

若是可以徹底看懂以上的代碼,就表明已經掌握了groovy的基本語法了。


使用Gradle將項目打包

本小節咱們來使用Gradle將項目打包爲jar包,首先按上一小節所演示的,新建一個Gradle項目,默認IDEA會幫咱們生成構建腳本,即項目根目錄下的build.gradle文件,而後隨便在工程裏建立個類寫些代碼。以下:
Gradle初體驗

點擊右邊的Gradle進入控制檯,點擊jar進行打包:
Gradle初體驗

生成的jar包會存放在build目錄下:
Gradle初體驗


一樣的,咱們可使用Gradle將項目打包爲war包,只須要在構建腳本中,增長打war包的插件便可:

plugins {
    id 'java'
    id 'war'
}

這時Gradle的控制檯,就會多出一個war插件,點擊這個war,便可將項目打成war包:
Gradle初體驗

生成的war包也是會存放在build目錄下:
Gradle初體驗


自定義任務

咱們能夠在構建腳本中自定義一些任務,例如個人工程裏沒有自動建立目錄的話,就能夠編寫自定義任務讓Gradle幫你建立目錄。在build.gradle構建腳本中,編寫以下內容:

// 定義一個閉包,用於完成目錄的建立
def createDir = {
    path ->
        File dir = new File(path)
        if (!dir.exists()) {
            dir.mkdirs()
        }
}

// 定義makeJavaDir任務
task makeJavaDir() {
    def paths = ['src/main/java', 'src/main/resources', 'src/test/java', 'src/test/resources']
    // 在任務列表最前面添加動做
    doFirst {
        paths.forEach(createDir)
    }
}

// 定義makeWebDir任務
task makeWebDir() {
    // 依賴makeJavaDir任務
    dependsOn 'makeJavaDir'
    def paths = ['src/main/webapp', 'src/test/webapp']
    // 在任務列表末尾添加動做
    doLast {
        paths.forEach(createDir)
    }
}

此時,個人工程的src目錄下是沒有任何目錄的:
Gradle初體驗

點擊執行makeWebDir任務:
Gradle初體驗

目錄建立成功:
Gradle初體驗


構建的生命週期

Gradle構建的生命週期分爲三個階段:

  • 初始化階段:主要初始化項目,有哪些項目須要參於構建
  • 配置階段:主要生成Task的依賴關係和執行圖
  • 執行階段:執行Task的動做代碼

Gradle初體驗


依賴管理

大部分時候,咱們使用構建工具都是使用其中的依賴管理功能。依賴管理概述:

幾乎全部基於JVM的軟件項目都須要依賴外部類庫來重用現有的功能。自動化的依賴管理能夠明確依賴的版本,能夠解決因傳遞性依賴帶來的版本衝突。一個jar包屬於一個工件,在gradle中,工件在倉庫的座標是group、name以及version。而工件存放在倉庫裏,在gradle中經常使用的倉庫有mavenLocal、mavenCentral、jcenter,其中mavenCentra和jcenter是中央倉庫,mavenLocal則是本地倉庫

關於依賴的傳遞性:

  • B依賴A,若是C依賴B,那麼C依賴A

關於依賴階段:

  • 依賴階段分爲兩個階段,即編譯階段和運行階段,而測試時也是分爲這兩個階段。編譯階段所依賴的jar包,在運行階段也會依賴。不一樣的階段會有不一樣的標識,以下:
    • compile:編譯階段,runtime:運行階段
    • testCompile:測試編譯階段,testRuntime:測試運行階段

每一個依賴階段的關係圖:
Gradle初體驗

gradle特性之一是自動化依賴管理,經過下圖,咱們能夠簡單的看到自動化依賴管理過的程:
Gradle初體驗


咱們來看看如何添加依賴,例如我如今須要添加logback的依賴,首先到maven中央倉庫上,複製logback的gradle依賴:
Gradle初體驗

而後粘貼到 dependencies 方法裏就完成了依賴的添加,以下:

dependencies {
    testCompile group: 'junit', name: 'junit', version: '4.12'
    // https://mvnrepository.com/artifact/ch.qos.logback/logback-classic
    compile group: 'ch.qos.logback', name: 'logback-classic', version: '1.2.3'
}

注:若是發生依賴版本衝突,gradle默承認以解決版本衝突的問題,當出現兩個不一樣版本的依賴時,gradle默認會使用最高版本那個

若是咱們須要到多個倉庫上查找依賴的時候,能夠在 repositories 方法裏添加倉庫,gradle會按照配置前後去倉庫裏查找jar包,以下:

repositories {
    // 會按前後順序去查找jar包
    mavenLocal()
    mavenCentral()
}

若是有私服倉庫的話,也是在 repositories 方法裏進行配置,只不過須要指定一下url地址,以下:

repositories {
    // 通常會把私服倉庫配置在最前面
    maven{
        url ''
    }
    mavenLocal()
    mavenCentral()
}

自動化測試

概述:

一些開源的測試框架好比Junit、TestNG可以幫助你編寫可複用的結構化的測試用例,爲了運行這些測試用例,你要編譯他們,就像編譯源代碼同樣。測試代碼的做用僅僅用於測試的狀況,不該該被髮布到生產環境中,須要把源代碼和測試代碼分開來

Gradle測試目錄結構:
Gradle初體驗

Gradle和Maven同樣,可以自動進行測試用例的發現,測試發現規則以下:

  • 任何繼承自junit.framework.TestCase或groovy.util.GroovyTestCase的類
  • 任何被@RunWith註解的類
  • 任何至少包含一個被@Test註解的類

因爲Gradle和Maven的測試很相似,我這裏就不進行演示了

相關文章
相關標籤/搜索