Gradle下載安裝配置以及與Maven用法對比
- 1.1 Gradle 是什麼?
- 1.2 Gradle 如何安裝
- 1.3 Gradle 驗證是否安裝成功
- 1.4 Gradle 使用條件
- 1.5 Gradle VS Maven
- 1.5.1 關於依賴管理
- 1.5.2 關於生命週期
- 1.5.3 如何將一個Maven項目轉換成Gradle項目
- 1.5.4 Gradle 如何下載依賴?
- 1.5.5 Gradle 如何聲明依賴?
- 1.5.5.1 Gradle 如何聲明Compile範圍依賴
- 1.5.5.2 Gradle 如何聲明Runtime範圍依賴
- 1.5.5.3 Gradle 如何聲明測試依賴
- 1.5.5.4 Gradle 如何聲明排除依賴
- 1.5.5.5 Gradle 如何聲明provided依賴
- 1.5.6 Gradle 如何聲明插件
- 1.5.7 Gradle如何配置倉庫鏡像
- 1.5.8 Gradle 如何配置多模塊
- 1.5.9 Gradle 如何爲插件配置參數?
- 1.6 總結
這篇博文來講解下Gradle 如何下載安裝和配置順便比較下和Maven 用法的不同之處.
1.1 Gradle 是什麼?
Gradle 和 Maven 一樣,都是一個項目依賴管理構建工具。
那爲什麼我們還要放棄Maven 改用Gradle 呢?
帶着問題的答案我們來到了Gradle 官網,相信你會看到這樣的界面:
翻譯成中文就是
從移動應用程序到微服務,從小型創業公司到大型企業,Gradle可以幫助團隊更快地構建,自動化和交付更好的軟件。
下面還有一張圖:
- Gralde可以構建一切:
- 支持Java,C++,Python或自己開發的語言
- 用於在任何平臺上部署的軟件包。
- 進行單倉庫或多倉庫。
- 並依靠Gradle無與倫比的多功能性來構建所有組件。
- Gradle可以自動化一切
- 使用Gradle豐富的API和成熟的插件和集成生態系統來實現自動化方面的雄心勃勃。
- 從頭到尾對您的軟件交付進行建模,集成和系統化。
- 更快地交付
- 用優雅,快速的構建來擴展開發。
- 從避免編譯到高級緩存等,我們不懈地追求性能,因此您的團隊可以不斷交付。
上面介紹了一些它的優點,接下來我們看看都誰在使用他們。
資料來源: top 20 open-source projects
我們可以看到著名的一些開源項目都在使用Gradle.
除此之外,主流的IDE 也都支持Gradle
另外,關於用戶的好評也是不斷,無論是Netflix 的高級開發工程師還是領英的高級工程師管理者都認爲它很不錯。
1.2 Gradle 如何安裝
好了誇完了,我們來看看怎麼安裝Gradle.
當前Gradle 的最新版本是6.3, 關於下載方式根據不同操作系統不盡相同。
1.2.1 Windows 如何下載安裝
Gradle 官方下載地址https://gradle.org/releases/
這裏提供了二進制和完整版下載,binary-only 是隻包含二進制文件,complete 除了二進制之外還包括示例和文檔。
一般不差那麼點磁盤空間都會選擇complete 版本.
如果是這種方式安裝的話,無論是Windows 用戶還是Mac OSX 用戶都需要手動配置環境變量
- Windows 用戶
- 新建配置環境變量
GRADLE_HOME C:/app/gradle/gradle-6.3
- 追加到PATH 環境變量
PATH:${GRADLE_HOME}/bin
- Mac OSX 用戶
- 創建/opt/gradle文件夾
mkdir /opt/gradle
- 解壓文件
unzip -d /opt/gradle gradle-6.3-bin.zip
- 查看當前路徑下的文件列表
ls
- 安裝環境變量
export PATH=$PATH:/opt/gradle/gradle-6.3/bin
1.2.2 Mac OSX 如何下載安裝
Mac OSX 一般來說操作系統自帶了HomeBrew 包管理器,因此安裝一般使用包管理器方式進行安裝。
安裝命令如下所示:
brew install gradle
1.3 Gradle 驗證是否安裝成功
安裝完成後我們一般需要驗證我們的安裝是否成功。
不管使用哪種方式進行安裝,最終都可以輸入命令驗證是否安裝成功
gradle -v
命令執行後如下圖所示:
1.4 Gradle 使用條件
Gradle 不管運行在哪個系統都需要安裝JDK 或JRE 支持,建議最好安裝JDK 8+ 版本
驗證JDK 是否輸入如下命令
java -version
如果運行成功,輸出如下內容
在這裏插入代碼片
1.5 Gradle VS Maven
接下來我們針對Gradle 和Maven 做一個對比。
1.5.1 關於依賴管理
我們知道在Maven 中,擁有.m2 文件夾,所有的依賴都會默認下載到這個文件夾中。
/Users/zhaoqingfeng/.m2/repository/
在Gradle 中同樣擁有.gradle 文件夾,所有的依賴都會下載到這個文件夾中。
/Users/zhaoqingfeng/.gradle/caches/modules-2/files-2.1
1.5.2 關於生命週期
- maven 的生命週期
- clean 清理/target 文件夾下的資源
- compile 編譯下載依賴
- test 執行JUnit 測試
- package 將項目打包成jar 或war
- verify 通常包括單元測試,任何靜態分析任務(如Checkstyle)和其他任務
- install 安裝到Maven本地倉庫
- deploy 發佈到遠程倉庫
- Gradle 的生命週期
build 是爲項目下載關聯依賴
1.5.3 如何將一個Maven項目轉換成Gradle項目
將現有的Maven構建自動轉換爲Gradle方法非常簡單隻需要輸入如下命令即可
gradle init
1.5.4 Gradle 如何下載依賴?
maven中需要輸入如下命令爲項目安裝依賴:
mvn install
Gradle 中爲項目下載依賴則需要輸入如下命令:
gradle build
1.5.5 Gradle 如何聲明依賴?
接下來我們學習下如何使用Gradle 聲明各種類型的依賴。
1.5.5.1 Gradle 如何聲明Compile範圍依賴
之前的Maven 是這麼聲明一個依賴的
pom.xml 部分配置示例如下
<!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.13.1</version>
</dependency>
build.gradle 部分配置示例如下:
implementation 'log4j:log4j:1.2.12'
當然可能你還看過其他一些舊版本的其他寫法,比如
舊版本寫法一:compile group: 'org.apache.logging.log4j', name: 'log4j-core',version: '2.13.1'
舊版本寫法二:
dependencies { compile 'log4j:log4j:1.2.12' }
1.5.5.2 Gradle 如何聲明Runtime範圍依賴
在maven 中,我們引入一個運行時有效的依賴是這麼操作的。
<!-- added MySQL support -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
在gradle 中如果是普通運行時依賴需要這麼做:
dependencies {
runtimeOnly 'mysql:mysql-connector-java'
}
如果是僅用於測試範圍的運行時依賴則需要這麼做
dependencies {
testRuntimeOnly 'mysql:mysql-connector-java'
}
1.5.5.3 Gradle 如何聲明測試依賴
如果是測試和編譯範圍的依賴
dependencies {
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
1.5.5.4 Gradle 如何聲明排除依賴
在Maven中聲明排除依賴是這麼做的:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
在Gradle中聲明測試依賴需要這麼做:
dependencies {
testImplementation('org.springframework.boot:spring-boot-starter-test') {
exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
}
}
1.5.5.5 Gradle 如何聲明provided依賴
在maven中
<!-- https://mvnrepository.com/artifact/javax.servlet/servlet-api -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
在Gradle中則是
providedCompile group: 'javax.servlet', name: 'servlet-api', version: '2.5'
如果只是在運行範圍內的provided依賴
providedRuntime group: 'javax.servlet', name: 'servlet-api', version: '2.5'
1.5.6 Gradle 如何聲明插件
maven中聲明插件是這麼做的
<plugin>
<groupId>com.google.cloud.tools</groupId>
<artifactId>jib-maven-plugin</artifactId>
<version>2.1.0</version>
</plugin>
gradle 聲明插件方式比較簡單直接:
plugins {
id 'java'
id 'com.google.cloud.tools.jib' version '1.8.0'
}
1.5.7 Gradle如何配置倉庫鏡像
一個完整示例如下:
build.gradle
plugins {
id 'java'
id 'org.jetbrains.intellij' version '0.4.18'
}
group 'com.xingyun'
version '1.0-SNAPSHOT'
sourceCompatibility = 1.8
repositories {
maven {
url "https://maven.aliyun.com/repository/public/"
}
//default is https://repo.maven.apache.org/maven2/
mavenCentral()
//default is https://jcenter.bintray.com/
jcenter()
//default is https://dl.google.com/dl/android/maven2/
google()
//customize repository
maven {
url "https://maven.aliyun.com/repository/public/"
}
maven {
url "https://maven.springframework.org/release/"
}
maven {
url "https://maven.restlet.com/"
}
// mavenLocal()
}
dependencies {
testCompile group: 'junit', name: 'junit', version: '4.12'
}
1.5.8 Gradle 如何配置多模塊
在maven中配置多模塊項目是這麼配置的
<modules>
<module>simple-weather</module>
<module>simple-webapp</module>
</modules>
在Gradle中則需要這麼配置
rootProject.name = 'simple-multi-module'
include 'simple-weather', 'simple-webapp'
1.5.9 Gradle 如何爲插件配置參數?
在maven中爲插件配置參數是這麼做的
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-checkstyle-plugin</artifactId>
<version>2.17</version>
<executions>
<execution>
<id>validate</id>
<phase>validate</phase>
<configuration>
<configLocation>checkstyle.xml</configLocation>
<encoding>UTF-8</encoding>
<consoleOutput>true</consoleOutput>
<failsOnError>true</failsOnError>
<linkXRef>false</linkXRef>
</configuration>
<goals>
<goal>check</goal>
</goals>
</execution>
</executions>
</plugin>
在gradle中則需要這麼做
checkstyle {
config = resources.text.fromFile('checkstyle.xml', 'UTF-8')
showViolations = true
ignoreFailures = false
}
1.6 總結
Gradle 比Maven 好處有三點:
- 高度可定製化:Gradle高度可定製化和擴展,可以完成更多更復雜的自動化腳本任務。
- 更快:編譯構建速度更快,據官網介紹Gradle比Maven快了2-10倍
- 更強大:Gradle是Android的官方構建工具,並支持許多流行的語言和技術,超過二十多個頂級開源項目都在使用。
本篇完~