Gradle是Java項目三大構建工具(Ant、Maven和Gradle)之一,通過它可以更加便捷地構建規範的Java項目和管理Java依賴。Gradle在Maven的基礎上,通過Groovy的特定領域語言(DSL)來聲明項目設置,避免了maven基於XML的各種繁瑣配置。Gradle與Maven的關係可以用青出於藍而勝於藍來形容,Gradle沿用了Maven的GroupID、ArtifactID和Version組成Coordination唯一標識一個依賴項,並且將maven的scope簡化爲了compile、runtime、testCompile、testRuntime四種。此外Gradle沿用了maven的src目錄結構,由source、resource、test source、test resource等相應文件夾構成。
安裝Gradle
首先需要注意Gradle需要運行在Java 8或更高版本。
從Gradle官網下載所需要的版本,只需要下載binary-only版本即可,然後將下載的文件解壓到目標文件夾D:\Program\gradle-6.5\
將解壓的目標文件夾添加到系統的環境變量Path中,右擊我的電腦 -> 屬性 -> 高級系統設置 -> 環境變量,在系統變量中找到Path
,然後點擊新建,將bin目錄填入:D:\Program\gradle-6.5\bin
在命令行輸入gradle -v顯示Gradle版本爲6.5
構建Java項目
在目標文件夾GradleDemo下執行命令 gradle init
初始化Java項目,出現如下提示,選擇application、Java、構建語言爲Groovy、測試框架JUnit4,然後輸入項目名稱和Java包名,這裏都採用默認值GradleDemo
Select type of project to generate:
1: basic
2: application
3: library
4: Gradle plugin
Enter selection (default: basic) [1..4] 2
Select implementation language:
1: C++
2: Groovy
3: Java
4: Kotlin
5: Swift
Enter selection (default: Java) [1..5] 3
Select build script DSL:
1: Groovy
2: Kotlin
Enter selection (default: Groovy) [1..2] 1
Select test framework:
1: JUnit 4
2: TestNG
3: Spock
4: JUnit Jupiter
Enter selection (default: JUnit 4) [1..4] 1
Project name (default: GradleDemo):
Source package (default: GradleDemo):
> Task :init
Get more help with your project: https://docs.gradle.org/6.5/userguide/tutorial_java_projects.html
BUILD SUCCESSFUL in 18s
2 actionable tasks: 2 executed
生成的項目目錄結構如下,其中Gradle Wrapper
是幫助解決項目依賴並構建項目的執行腳本,gradle使用Wrapper包裝整個項目,使我們在不同環境下構建項目變得簡單。
├── .gradle // 存放項目依賴等文件夾
├── gradle
│ └── wrapper
│ ├── gradle-wrapper.jar // Gradle Wrapper的執行jar包
│ └── gradle-wrapper.properties // Gradle Wrapper的配置屬性
├── src // Java項目的源代碼目錄
│ └── main // 項目目錄
│ ├── java // 項目java代碼目錄
│ └── GradleDemo // 項目包
│ └── resources // 資源目錄
│ └── test // 測試模塊目錄
│ ├── java
│ └── GradleDemo // 對應測試代碼
│ └── resources // 測試資源目錄
├── build.gradle // gradle構建命令腳本
├── gradlew // Gradle Wrapper的Unix執行腳本
├── gradlew.bat // Gradle Wrapper的Windows執行腳本
└── settings.gradle // Gradle的配置文件
其中build.gradle文件是項目的依賴配置文件,其中plugins
中添加gradle插件庫。
repository
定義Java依賴庫,這裏默認是爲jcenter,我們在讓其先查找本地的maven倉庫mavenLocal(),然後去找自定義的國內阿里雲倉庫,最後再去中央倉庫jcenter()。
在dependencies
中定義項目所需要的Java依賴
plugins {
id 'java'
id 'application'
}
repositories {
mavenLocal()
maven { name "Alibaba" ; url "https://maven.aliyun.com/repository/public" }
jcenter()
}
dependencies {
api 'org.apache.commons:commons-math3:3.6.1' //提供給用戶的api依賴接口,用戶在編譯時可見
implementation 'com.google.guava:guava:29.0-jre' //內部自己使用的依賴
testImplementation 'junit:junit:4.13' //測試時使用的依賴
}
application {
mainClassName = 'GradleDemo.App'
}
執行task
Gradle提供了許多項目構建的腳本,在項目目錄下命令行執行 ./gradlew tasks
會列出所有可執行的task任務。
我們可以在build.gradle
文件內自定義要執行的操作。例如在其中定義copySrc
操作將“src”文件夾複製到“dest”文件夾,其中group爲task
的分組信息,description
爲命令的描述,在上面的命令時顯示這些信息
task copySrc(type: Copy, group: "Custom", description: "Copies sources to the dest directory") {
from "src"
into "dest"
}
然後在項目所在文件夾執行如下命令 ./gradlew copySrc
調用該task,執行完成後可以看到src已經被複製爲dest文件夾了
gradle還提供了許多插件來完成其他操作,例如使用base
插件中的Zip
完成壓縮操作,首先在plugins
中引入該插件,然後定義zipSrc
完成將src文件夾壓縮爲src-1.0.zip
plugins {
id 'base'
......
}
task zip(type: Zip, group: "Custom" , description: "Archives sources in a zip file") {
from "src"
archiveFileName = "basic-demo-1.0.zip"
}
同樣執行 ./gradlew zipSrc
命令就會在目錄下生成/build/distributions/basic-demo-1.0.zip文件
編譯運行
通過./gradlew build
命令可以編譯項目,第一次運行編譯時,gradle會檢查本地緩存中是否有所需依賴,如果沒有則從倉庫下載依賴包,默認的本地緩存在C:\Users\Super.gradle\caches目錄下。build會編譯整個項目並且將結果輸出到項目下的build/libs/GradleDemo.jar文件。此外build還會運行測試文件,並且生成測試報告 build/reports/tests/test/index.html 如下
在gradle中使用gretty
插件運行WebApp,gretty包含了許多web應用相關的task腳本,默認使用Jetty容器作爲web項目的發佈容器,相比於Tomacat,jettty是一個較爲輕量級的servlet容器。
plugins {
id 'war'
id 'org.gretty' version '3.0.3'
}
執行./gradlew appRun
,如下提示項目就會運行在http://localhost:8080/GradleDemo
> ./gradlew appRun
11:03:06 WARN Ignoring deprecated socket close linger time
11:03:12 INFO Jetty 9.4.24.v20191120 started and listening on port 8080
11:03:12 INFO GradleDemo runs at:
11:03:12 INFO http://localhost:8080/GradleDemo
> Task :appRun
Press any key to stop the server.
<===========--> 87% EXECUTING [26s]
> :appRun
gradle提供了項目依賴的可視化頁面,在項目文件夾輸入命令 gradle build --scan
會進行構建掃描,並提供結果頁面的網址
BUILD SUCCESSFUL in 1s
8 actionable tasks: 8 up-to-date
Publishing a build scan to scans.gradle.com requires accepting the Gradle Terms of Service defined at https://gradle.com/terms-of-service. Do you accept these terms? [yes, no] yes
Gradle Terms of Service accepted.
Publishing build scan...
https://gradle.com/s/4p7baa6ja2orq
瀏覽器訪問https://gradle.com/s/4p7baa6ja2orq可以看到如下所示頁面,包含整個項目構建信息,第一次訪問該網址會提示輸入你的郵箱
IDEA中使用gradle
IDEA會默認將gradle依賴下載在C:\Users\Super.gradle目錄下,我們可以手動設置其倉庫位置,點擊File | Settings | Build, Execution, Deployment | Build Tools | Gradle,修改 Gradle user home
爲目標位置即可。
在IDEA中新建項目 File -> New -> Project ,會彈出如下界面,選擇Gradle、Java
點擊next 會提示填寫項目的GroupId、ArtifactId、Version等信息,之後點擊Finish,就會創建一個Gradle的Java項目並自動下載相關資源完成項目初始化