Spring Boot徹底拋棄Maven,正式轉(zhuǎn)向Gradle,速度賊快!
作者 :樂百川
轉(zhuǎn)載自?:toutiao.com/i6824937779193971207
相信使用Java的同學(xué)都用過Maven,這是一個非常經(jīng)典好用的項目構(gòu)建工具。但是如果你經(jīng)常使用Maven,可能會發(fā)現(xiàn)Maven有一些地方用的讓人不太舒服:
如果你對Maven的這些缺點也有所感觸,準(zhǔn)備嘗試其他的構(gòu)建工具,那么你可以試試gradle,這是一個全新的java構(gòu)建工具,解決了Maven的一些痛點。

一、安裝Gradle
最傳統(tǒng)的安裝方法就是去gradle官網(wǎng)下載二進(jìn)制包,解壓,然后將路徑添加到環(huán)境變量中。如果你沒什么其他需求,可以使用這種安裝方式。但是,gradle是一個非常新潮的項目,每隔幾個月就會發(fā)布一個新版本,這種方式可能跟不上gradle的更新速度。
當(dāng)然,如果你完全不喜歡安裝這么多亂七八糟的東西,那也可以使用gradle。gradle提供了一個名為gradle wrapper的工具,可以在沒有安裝gradle的情況下使用gradle。好吧,其實它就是個腳本文件,當(dāng)你運行wrapper腳本的時候,如果腳本發(fā)現(xiàn)你電腦里沒有g(shù)radle,就會自動替你下載安裝一個。現(xiàn)在甚至還出現(xiàn)了Maven wrapper,也是個腳本文件,可以自動安裝Maven。
二、使用gradle wrapper
這里我使用的IDEA來創(chuàng)建和使用gradle項目。



三、依賴管理
下面來看看gradle的依賴管理功能,這也算是我們使用構(gòu)建工具的主要目的之一了。這點也是gradle相較maven的優(yōu)勢之一了。相較于maven一大串的XML配置,gradle的依賴項僅需一行。
dependencies {
testImplementation 'junit:junit:4.13'
implementation 'com.google.code.gson:gson:2.8.6'
}
2.api,和implementation類似,都是編譯和運行時都可見的依賴。但是api允許我們將自己類庫的依賴暴露給我們類庫的使用者。
3.compileOnly和runtimeOnly,這兩種顧名思義,一種只在編譯時可見,一種只在運行時可見。而runtimeOnly和Maven的provided比較接近。
4.testImplementation,這種依賴在測試編譯時和運行時可見,類似于Maven的test作用域。
5.testCompileOnly和testRuntimeOnly,這兩種類似于compileOnly和runtimeOnly,但是作用于測試編譯時和運行時。
通過簡短精悍的依賴配置和多種多樣的作用與選擇,Gradle可以為我們提供比Maven更加優(yōu)秀的依賴管理功能。
四、gradle的任務(wù)和插件

五、配置鏡像

而依賴的本地緩存在caches\modules-2\files-2.1文件夾下。目錄結(jié)構(gòu)和Maven的本地緩存類似,都是包名+版本號的方式,但是gradle的目錄結(jié)構(gòu)最后一層和Maven不同,這導(dǎo)致它們無法共用本地緩存。

言歸正傳,在gradle中配置下載鏡像需要在.gradle文件夾中直接新建一個init.gradle初始化腳本,腳本文件內(nèi)容如下。這樣一來,gradle下載鏡像的時候就會使用這里配置的鏡像源下載,速度會快很多。再加上gradle wrapper在中國設(shè)置了CDN,現(xiàn)在使用gradle的速度應(yīng)該會很快。
allprojects?{
???repositories?{
???????maven?{
???????????url?"https://maven.aliyun.com/repository/public"
???????}
???????maven {
???????????url?"https://maven.aliyun.com/repository/jcenter"
???????}
???????maven {
???????????url?"https://maven.aliyun.com/repository/spring"
???????}
???????maven {
???????????url?"https://maven.aliyun.com/repository/spring-plugin"
???????}
???????maven {
???????????url?"https://maven.aliyun.com/repository/gradle-plugin"
???????}
???????maven {
???????????url?"https://maven.aliyun.com/repository/google"
???????}
???????maven {
???????????url?"https://maven.aliyun.com/repository/grails-core"
???????}
???????maven {
???????????url?"https://maven.aliyun.com/repository/apache-snapshots"
???????}
???}
}org.gradle.jvmargs=-Xmx4g -XX:MaxPermSize=512m?-XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
systemProp.http.proxyHost=127.0.0.1
systemProp.http.proxyPort=10800
systemProp.https.proxyHost=127.0.0.1
systemProp.https.proxyPort=10800
systemProp.file.encoding=UTF-8
org.gradle.warning.mode=all六、為什么使用gradle?
2. 靈活性,gradle要比Maven靈活太多,雖然有時候靈活并不是一件好事情。但是大部分情況下,靈活一點可以極大的方便我們。Maven死板的XML文件方式做起事情來非常麻煩。很多Maven項目都通過執(zhí)行外部腳本的方式來完成一些需要靈活性的工作。而在gradle中配置文件就是構(gòu)建腳本,構(gòu)建腳本就是編程語言(groovy編程語言),完全可以自給自足,無需外部腳本。
3. 簡潔性,完成同樣的功能,gradle腳本的長度要遠(yuǎn)遠(yuǎn)短于maven配置文件的長度。雖然很多人都說XML維護(hù)起來不麻煩,但是我覺得,維護(hù)一個光是依賴就有幾百行的XML文件,不見得就比gradle腳本簡單。
也許是因為我上面說的原因,也許有其他原因,不得不承認(rèn)的一件事情就是gradle作為一個新興的工具已經(jīng)有了廣泛的應(yīng)用。spring等項目已經(jīng)從Maven切換到了gradle。開發(fā)安卓程序也只支持gradle了。因此不管是否現(xiàn)在需要將項目從maven切換到gradle,但是至少學(xué)習(xí)gradle是一件必要的事情。

如有收獲,歡迎「分享?
」
「點贊
」「評論?
」
看完本文有收獲?請轉(zhuǎn)發(fā)分享給更多人
? 開發(fā)者全社區(qū)?
