Gradle官方的安裝文檔,地址以下:java
1.Gradle是基於JVM的,因此首先須要確保已經安裝好了JDK,而我這裏是已經安裝好的了,官方文檔中表示目前最新版本的Gradle須要的JDK環境是1.7以上。我這裏用的是jdk10:編程
2.到官網上下載Gradle,下載地址以下,我這裏下載的是二進制安裝包:vim
3.下載好後,解壓後目錄以下:bash
4.配置環境變量:閉包
在path中增長這個環境變量:app
5.執行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查看版本命令,確認安裝成功:
Groovy簡介:
Groovy是用於Java虛擬機的一種敏捷的動態語言,它是一種成熟的面向對象編程語言,便可以用於面向對象編程,又能夠用做純粹的腳本語言。使用該語言沒必要編寫過多的代碼,同時又具備閉包和動態語言中的其餘特性。
Groovy特色:
Groovy特性的高級特性:
什麼是構建塊:
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能夠簡寫爲 <<
項目和任務的關係圖:
本小節咱們用一個簡單的demo項目,來直觀的演示一下Java和groovy在語法上的區別。首先建立一個Gradle工程:
自定義GroupId和ArtifactId:
選擇本地的Gradle:
項目建立好後,打開Gradle控制檯:
咱們先來使用Java語法進行編寫,代碼及運行結果以下:
若是使用groovy語法進行編寫的話,將會簡單不少。代碼及運行結果以下:
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將項目打包爲jar包,首先按上一小節所演示的,新建一個Gradle項目,默認IDEA會幫咱們生成構建腳本,即項目根目錄下的build.gradle文件,而後隨便在工程裏建立個類寫些代碼。以下:
點擊右邊的Gradle進入控制檯,點擊jar進行打包:
生成的jar包會存放在build目錄下:
一樣的,咱們可使用Gradle將項目打包爲war包,只須要在構建腳本中,增長打war包的插件便可:
plugins { id 'java' id 'war' }
這時Gradle的控制檯,就會多出一個war插件,點擊這個war,便可將項目打成war包:
生成的war包也是會存放在build目錄下:
咱們能夠在構建腳本中自定義一些任務,例如個人工程裏沒有自動建立目錄的話,就能夠編寫自定義任務讓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目錄下是沒有任何目錄的:
點擊執行makeWebDir任務:
目錄建立成功:
Gradle構建的生命週期分爲三個階段:
大部分時候,咱們使用構建工具都是使用其中的依賴管理功能。依賴管理概述:
幾乎全部基於JVM的軟件項目都須要依賴外部類庫來重用現有的功能。自動化的依賴管理能夠明確依賴的版本,能夠解決因傳遞性依賴帶來的版本衝突。一個jar包屬於一個工件,在gradle中,工件在倉庫的座標是group、name以及version。而工件存放在倉庫裏,在gradle中經常使用的倉庫有mavenLocal、mavenCentral、jcenter,其中mavenCentra和jcenter是中央倉庫,mavenLocal則是本地倉庫
關於依賴的傳遞性:
關於依賴階段:
每一個依賴階段的關係圖:
gradle特性之一是自動化依賴管理,經過下圖,咱們能夠簡單的看到自動化依賴管理過的程:
咱們來看看如何添加依賴,例如我如今須要添加logback的依賴,首先到maven中央倉庫上,複製logback的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和Maven同樣,可以自動進行測試用例的發現,測試發現規則以下:
因爲Gradle和Maven的測試很相似,我這裏就不進行演示了