Gradle是什么?

Gradle是一款基于A(yíng)pache Ant和Apache Maven概念的項(xiàng)目自動(dòng)化構(gòu)建工具。
也就是說(shuō),Gradle 只是一種工具,如果將軟件項(xiàng)目和建筑項(xiàng)目類(lèi)比,那么 Gradle 就完成了建筑材料的采購(gòu)、管理以輪廓規(guī)劃的工作。開(kāi)發(fā)者告訴Gradle要在這塊地建造一片園區(qū)(構(gòu)建一個(gè)軟件項(xiàng)目),需要在指定的水泥廠(chǎng)獲取水泥、在指定的鋼廠(chǎng)獲取鋼材(聲明插件和依賴(lài)以及倉(cāng)庫(kù))等等。那么Gradle就會(huì)去那些地方獲得材料(獲取依賴(lài)),并對(duì)空地進(jìn)行輪廓規(guī)劃(項(xiàng)目根目錄生成)。
- “輪廓規(guī)劃”:Gradle會(huì)完成整個(gè)項(xiàng)目中文件結(jié)構(gòu)的梳理,并自動(dòng)生成文件根目錄。
- “材料采購(gòu)、管理”:Gradle會(huì)對(duì)項(xiàng)目的外部依賴(lài)進(jìn)行獲取、管理,這種獲取就是根據(jù)配置的依賴(lài),去對(duì)應(yīng)倉(cāng)庫(kù)下載;管理就是對(duì)于依賴(lài)配置的解析。
注:本文所說(shuō)的Gradle都是集成在IntelliJ IDEA中的插件。另外的,還有基于Groovy的獨(dú)立Gradle腳本。
如何使用build.gradle文件配置項(xiàng)目依賴(lài)
通過(guò) IntelliJ IDEA 使用Gradle,需要在創(chuàng)建項(xiàng)目時(shí)通過(guò) IntelliJ 的插件來(lái)引入Gradle Project。設(shè)置好GroupId、ArtfactId 后就可以得到如下的項(xiàng)目目錄:

之后就要通過(guò)編輯build.gradle文件來(lái)配置整個(gè)項(xiàng)目的依賴(lài)了。
打開(kāi)自動(dòng)生成的build.gradle文件,會(huì)有如下內(nèi)容:
group 'com.tw.jlhe'
version '1.0-SNAPSHOT'
apply plugin: 'java'
sourceCompatibility = 1.5
repositories {
mavenCentral()
}
dependencies {
testCompile group: 'junit', name: 'junit', version: '4.11'
}
其中group、version兩項(xiàng)是之前創(chuàng)建項(xiàng)目時(shí)填入的信息,指出組織名稱(chēng)和版本信息。
apply plugin指出要使用的插件。這里要知道,Gradle本身是提供一些用于自動(dòng)化構(gòu)建項(xiàng)目的功能(tasks),但是無(wú)法對(duì)使用任意一種語(yǔ)言、框架、還有IDE的項(xiàng)目都能實(shí)現(xiàn)自動(dòng)化構(gòu)建。所以這里就需要一些插件來(lái)擴(kuò)充Gradle的功能。例如上述代碼中的apply plugin: 'java'即聲明使用Java插件,該插件的使用意味著 Gradle 會(huì)嘗試獲取 Java 相關(guān)的文件、構(gòu)建Java項(xiàng)目文件目錄(包括一個(gè)main和一個(gè)test)并提供Java插件所附帶的Gradle tasks(如assemble、check、build等tasks指令)。
sourceCompatibility指出當(dāng)前項(xiàng)目使用的Java的版本是JDK 1.5。這個(gè)可以根據(jù)本地的JRE和項(xiàng)目需求來(lái)修改。
repositories指出獲取外部依賴(lài)的倉(cāng)庫(kù)位置,mavenCentral()其實(shí)封裝了Maven central倉(cāng)庫(kù)的URL地址。
'dependencies '指出項(xiàng)目的外部依賴(lài),這些依賴(lài)將會(huì)指引 Gradle 從配置的倉(cāng)庫(kù)中獲取對(duì)應(yīng)的 jar 包,放入External Libraries中。在配置了指定的依賴(lài)后,這個(gè)獲取的過(guò)程完全是自動(dòng)的。
那么要搭建一個(gè)基于SpringBoot的HelloWorld項(xiàng)目,build.gradle文件就可以這樣寫(xiě):
group 'com.tw.jlhe'
version '1.0-SNAPSHOT'
buildscript{
repositories{
mavenCentral()
}
dependencies{
classpath("org.springframework.boot:spring-boot-gradle-plugin:1.4.2.RELEASE")
}
}
apply plugin: 'java'
apply plugin: 'idea'
apply plugin: 'org.springframework.boot'
sourceCompatibility = 1.8
targetCompatibility = 1.8
jar{
baseName = 'gs-hello-world-demo'
version = '0.1.0'
}
repositories {
mavenCentral()
}
dependencies {
compile group: 'org.springframework.boot', name: 'spring-boot-starter-web', version: '1.4.2.RELEASE'
}
要注意其中buildscript{}代碼塊。該塊內(nèi)聲明的倉(cāng)庫(kù)和依賴(lài)是build.gradle所需要的依賴(lài)資源,而該代碼塊外的倉(cāng)庫(kù)和依賴(lài)是該項(xiàng)目項(xiàng)目所需要依賴(lài)資源。
這其中的區(qū)別在于build.gradle文件在被加載時(shí),會(huì)優(yōu)先加載buildscript代碼塊(無(wú)論其位置在文件開(kāi)頭或結(jié)尾)。因?yàn)檫@個(gè)原因,一般在引入一些額外的插件(主要指開(kāi)源項(xiàng)目、框架的插件包)時(shí),需要先在該代碼塊中聲明,之后才能使用apply plugin來(lái)擴(kuò)展到Gradle中。
下來(lái)Gradle就會(huì)為你下載依賴(lài)中指定的jar包了。完成后如下圖:

我個(gè)人覺(jué)得Gradle這種依賴(lài)管理方式很是方便(也可能是由于我以前沒(méi)有用過(guò)項(xiàng)目自動(dòng)化構(gòu)建工具,引包都是靠手工搜索、下載、導(dǎo)入)。
然后就可以開(kāi)始書(shū)寫(xiě)Java代碼啦?。℉elloWorldDemo會(huì)另起一篇。)
完成后的目錄如下:

下一步,就是讓寫(xiě)好的代碼運(yùn)行起來(lái)。
使用Gradle命令
Gradle提供了一些命令行便于開(kāi)發(fā)者使用。
在項(xiàng)目文件目錄下輸入
./gradlew tasks
就可以查看當(dāng)前Gradle所支持的指令。如下:

之所以是當(dāng)前,是因?yàn)镚radle的tasks會(huì)根據(jù)引入的plugin而有所擴(kuò)充。例如使用了apply plugin: 'java'的項(xiàng)目,其tasks會(huì)多出assemble、check等tasks。而使用了apply plugin: 'org.springframwork.boot',其tasks則會(huì)多出bootRun等。
而每一個(gè)task后面都會(huì)聲明該條task的作用。
那么,根據(jù)task的提示,我們只需執(zhí)行
./gradlew bootRun
就可以啟動(dòng)Spring boot項(xiàng)目。
最終運(yùn)行結(jié)果如下:

至此。