Gradle是什么?
基于特定領(lǐng)域語言Groovy來進行項目管理的自動化構(gòu)建工具
對比于Maven的區(qū)別?
Maven基于傳統(tǒng)xml依賴管理侥袜,工作中的直觀缺點是在項目規(guī)模越來越大的時候宣蠕,pom依賴眼花繚亂,管理起來很費勁博投,而且之前的文章《maven構(gòu)建依賴管理和依賴范圍》中寫到在工作中遇到j(luò)ar包沖突翅睛,不好排查遏匆。Gradle因其的簡潔靈活狞尔,功能強大,可以通過查看依賴報告直觀的解決依賴沖突,能更好的適用復(fù)雜的構(gòu)建環(huán)境冲呢。
Gradle安裝很簡單,步驟如下:
1厕诡、從官網(wǎng)下載壓縮包:https://gradle.org/
2灵嫌、配置環(huán)境變量
3量瓜、gradle -v务蝠, 驗證環(huán)境變量配置是否成功
3、注意配置新建變量 GRADLE_USER_HOME
變量名:GRADLE_USER_HOME
變量值:自定義Gradle倉庫目錄或者Maven的倉庫目錄(如:D:\apache-maven-3.1.1\repository)
在Gradle安裝目錄下的 init.d 文件夾下馏段,新建一個 init.gradle 文件轩拨,里面填寫以下配置
定義repositories 中 jar 包的獲取順序,優(yōu)先使用本地maven倉庫毅弧,在maven切換到gradle很方便气嫁。非常實用,重點9蛔4缦!
Groovy語言如何使用元咙,具有哪些特性梯影?
Gradle簡潔靈活的特點主要是,基于Groovy這種動態(tài)語言才能夠?qū)崿F(xiàn)庶香,所以想學(xué)會Gradle甲棍,核心的在于能夠?qū)W會Groovy如何編寫。Groovy編碼同Java一樣都是被編譯成字節(jié)碼文件運行在JVM虛擬機上赶掖,直接通過比較學(xué)習(xí)來了解Groovy幾乎沒有什么難度感猛。
Groovy主要的特點如下:
Groovy完全兼容Java的語法,但是在使用時在Java的基礎(chǔ)上又簡化很多
1奢赂、分號是可選的陪白,可以省略不寫
2、類膳灶、方法默認(rèn)是public咱士,不像Java有好幾個修飾符
3立由、編譯器自動給屬性添加getter/setter方法
4、屬性可以直接用點號獲取
5序厉、最后一個表達式的值會被作為返回值锐膜,return可以不寫
6、==在Java中比較的是內(nèi)存地址弛房,在Groovy中比較的是值道盏,等同于equals()
高效的Groovy特性:
1、assert語句
2文捶、動態(tài)語言捞奕,自動指定變量類型
3、字符串有三種表達方式單引號拄轻,雙引號颅围,三個單引號
4、Groovy中結(jié)合List恨搓、Map有更簡單的寫法
5院促、閉包,理解是把代碼塊作為參數(shù)傳入方法中調(diào)用
代碼展示以上特性:
自動化構(gòu)建工具主要解決的是斧抱,依賴管理常拓,自動化測試,項目部署辉浦,讓這些重復(fù)性的工作弄抬,能使用構(gòu)建工具簡單舒服的依賴管理,這些功能maven宪郊,gradle都已經(jīng)具備掂恕,只是對比maven,gradle實現(xiàn)的更加簡潔靈活弛槐,非常好用懊亡。
gradle兼容maven,所以目錄結(jié)構(gòu)相同:
而在進行依賴管理的時候到底與maven有何不同乎串?
1店枣、引入依賴形式不同
maven通過groupId、artifactId叹誉、version唯確定jar包:
gradle通過group鸯两、name、 version唯一確定jar包 :
2长豁、解決版本沖突方式不同:
出現(xiàn)版本沖突的原因是依賴的傳遞性钧唐,可以理解為爸爸依賴爺爺,如果兒子依賴爸爸蕉斜,那么確定兒子依賴爺爺逾柿。
maven:
只能進行手動排除
gradle:
默認(rèn)自動使用高版本,所以大部分時候并不需要開發(fā)人員自己去指定一個版本宅此,有效的避免了開發(fā)中自己去哼哧哼哧j解決ar包沖突問題机错,下圖顯示jar包沖突時默認(rèn)使用了高版本。
除了默認(rèn)外可以直接排除傳遞性依賴
還可以修改默認(rèn)的策略父腕,來強制指定一個版本
有依賴報告可以查看弱匪,方便找問題,這三處截圖省略璧亮。
3萧诫、gradle具備自定任務(wù)功能task
比如通過自定義構(gòu)建web項目的目錄結(jié)構(gòu),創(chuàng)建成功
4枝嘶、多項目構(gòu)建
很多時候一個項目都只是按MVC來模塊化帘饶,較少的模塊一般是簡單的項目,在復(fù)雜項目中有非常多的模塊群扶,如果maven進行管理通常都是通過繼承parent模塊來層層繼承及刻,xml的配置依賴jar包過多,梳理項目間的依賴關(guān)系會格外心累竞阐,而gradle真的是多項目構(gòu)建的福音缴饭,在parent項目build.gradle文件中,使用allprojects{}可以對所有模塊需要的配置進行指定骆莹,使用subprojects{}可以對所有子模塊需要依賴的包進行指定颗搂,這樣其他子項目就不需要進行依賴了,要改動版本只需要改一處就可以幕垦,涉及代碼較多丢氢,本文不展開說明。
5先改、自動化測試
在自動化測試上卖丸,maven和gradlle沒有太大差別,只要把測試代碼寫到指定的目錄盏道,那么構(gòu)建工具就可以自動發(fā)現(xiàn)測試用例自動執(zhí)行。gradle更優(yōu)秀的是在build之后到reports目錄下猜嘱,對測試結(jié)果有index.html衅枫,使用頁面形式對測試的結(jié)果進行可視化的展示。
6朗伶、項目部署
maven和gradle都可以將項目打包到本地和指定的遠程倉庫弦撩,目前我工作中使用的就是通過maven將項目打包的公司的svn上,而gradle是通過maven-publish插件操做论皆,操作的也是maven的倉庫益楼,很明顯使用gradle更便捷猾漫。