Gradle對Java項目進行依賴管理

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項目並自動下載相關資源完成項目初始化
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章