1. 程式人生 > 其它 >看到你還在用Maven,Gradle難道不香嗎?

看到你還在用Maven,Gradle難道不香嗎?

Maven是一個非常經典好用的JAVA專案構建工具,所有用JAVA開發或者測試開發的小夥伴們都知道。

不過,一向不走尋常路的老司機覺得Maven不爽!

第一,Maven的配置檔案是XML,專案依賴的包一旦多了, XML檔案就會變得冗長;

第二, XML確實不太靈活,假如老司機需要在構建過程中新增一些自定義邏輯,麻煩就多了;

設想一下:一個Android程式猿要適配若干Android手機的場景,就能理解自定義邏輯了。

if(isMoto){do something}

else if(isHuawei){do something}

...

第三,Maven對新版java支援不足,哪怕就是為了編譯java11,也需要更新內建的Maven外掛。

既然Maven作為一個構建工具有這麼多不爽?那麼小夥伴可以試試Gradle,這是一個全新的java構建工具。

2020年了,相信很多JAVA開發、測試開發小夥伴都開始用Intelij IDEA來編寫JAVA程式了,IDEA預設就支援Gradle Wrapper,就是說不用單獨安裝Gradle也可以。

試用過之後,老司機覺得,Gradle有很多優點,因為用的時間不長,老司機這裡先列舉兩個。



01. Gradle速度快



gradle使用構建快取、守護程序等方式提高編譯速度。結果就是gradle的編譯速度要遠超maven,平均編譯速度比Maven快好幾倍,而且專案越大,這個差距就越明顯。

柱狀圖表示編譯時間,柱子越高表示編譯時間越長。



02. Gradle靈活



Maven用XML,打包其實比較麻煩。很多Maven專案需要通過執行外部指令碼的來完成一些需要靈活性的工作。與之相對,Gradle中配置檔案就是構建指令碼,用groovy程式語言寫的,完全可以不需要外部指令碼。

千萬不要被groovy這種新語言嚇跑了,很簡單而且很多時候,我們需要編寫的內容很有限,相對動輒上百行的XML,配合外部指令碼,老司機覺得一站式服務還是挺好的。

光說不練假把式,光練不說傻把式。

來兩個例子看看Gradle比Maven、Ant究竟強在哪裡?

1、對軟體包的依賴,Gradle VS Maven,例如:junit

典型的Maven配置檔案看起來這樣:

<projectxmlns=”http://maven.apache.org/POM/4.0.0″xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”xsi:schemaLocation=”http://maven.apache.org/POM/4.0.0http://maven.apache.org/xsd/maven-4.0.0.xsd”>
<modelVersion>4.0.0</modelVersion>
<groupId>com.mycompany.app</groupId>
<artifactId>my-app</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>

Gradle的處理,看起來這樣:

applyplugin:“java”
group=“com.mycompany.app”
archivesBaseName=“my-app”
version=“1.0-SNAPSHOT”
repositories{
mavenCentral()
}
dependencies{
testCompile“junit:junit:3.8.1″
}

第一輪:Gradle勝出!

2. 任務管理,Gradle VS Ant,例如:hello world

Gradle和Ant一樣,都以task為最小執行單位。

Ant的寫法:

<?xmlversion=”1.0″?>
<projectname=”foo”>
<targetname=”hello”>
<echo>HelloWorld</echo>
</target>
</project>

Gradle的寫法:

taskhello<<{
println“HelloWorld”
}

第二輪:Gradle完勝!

兩輪比下來,Gradle的優點360度展示。老司機還想補充一點:

  • XML天生適合描述屬性,不適合表達狀態,比如:if… else… ; switch … case… 這類的顯然不是XML的特長,但是面對多環境時候又必須面對;

  • Gradle採用了Groovy語言,一種程式語言,來處理多條件問題,易如反掌。

老司機從事軟體行業N年,自己的一個體會是:

1. 軟體研發、測試開發行業頂尖的是Google;

2. Google內部使用的,用不了多久就會被外界廣泛使用,有些甚至會成為業內預設標準;

所以,Google推崇Gradle,那麼你呢?!

總之一句話——Gradle真香!