Gradle 和 Maven 性能對比,我猜你不一定知道!

每日英文

I’m sorry. Sometimes, I get jealous thinking that someone could make you happier than I could. 

對不起,有時候想到有人比我更能讓你開心,我就會很嫉妒。

每日掏心話

時間是治療心靈傷痛的最好良藥。痛苦,需要靠我們自己去慢慢化解。曾經愛過,傷過,痛過的記憶,會隨着時間的推移漸漸淡出我們的生活。

來自:樂百川 | 責編:樂樂

鏈接:jianshu.com/p/e8c3fe460b14

程序員小樂(ID:study_tech)第 714 次推文   圖片來自網絡

往日回顧:重磅!GitHub擔心美國政府限制,GitHub在中國設立子公司

   正文   

Gradle目前已經出到6.0版本了,想當初我第一次瞭解到Gradle的時候,它僅有2.0版本,這些年來一直不斷迭代和優化,現在可以說是非常成熟好用的一款工具。如果大家還在使用Maven,我建議大家學習一下Gradle,現在Gradle的性能可以說是完全超越了Maven,各種平臺也早已支持Gradle。可以說,除非是兼容老項目,否則,完全可以用Gradle來替代Maven。

Gradle顯然也對自己的性能很有信息,官網也專門留了一個地方,對Gradle和Maven進行了全方位的性能對比,對比結果很顯然,Gradle在各種方面都超越了Maven。我簡單翻譯了一下,大家可以看看。當然如果大家想看更詳細的對比,可以直接查看官網的詳細說明。

官網地址:gradle.org/gradle-vs-maven-performance/


各場景下的性能對比

Java類庫場景


爲了測試對典型Java類庫項目的影響,我們將Apache Commons Lang 3項目從Maven遷移到了Gradle(使用Java庫插件)。

Java類庫場景

Gradle在運行測試上快了1.7倍,而在開啓cache的時候快了30倍!


小型複合項目構建場景


這裏是對一個包含10個模塊的項目進行常見任務測試的結果,和微服務項目非常相似。每個子項目含有50個源文件和50個測試文件。

小型項目場景

Gradle在純淨構建上快2-3倍,而在增量構建上快了7倍,在Gradle任務輸出被緩存的情況下可以提升至14倍。

這個GIF動圖並排顯示了clean build場景下的構建,因此你可以直觀地看到差別(在沒有開啓構建緩存的情況下)。

動圖對比


中型複合項目構建場景


這裏是對一個單個倉庫包含了100個模塊的複合項目進行常見任務測試的結果。每個子項目包含100個源文件和100個測試文件。

中型項目場景

Gradle在純淨構建時快4-5倍,在增量構建是快大約40倍,在Gradle任務輸出被緩存的情況下可以提升到13倍。


大型複合項目構建情景


這裏是對一個單倉庫中包含500個模塊的複合項目運行常見任務的測試。每個子項目包含100個源文件和100個測試文件。

大型項目場景

Gradle在純淨構建時快3-10倍,在增量構建時快大約85倍,而在緩存了Gradle任務輸出的時候快了13倍。


大型單項目場景


雖然很少在一個項目中包含所有代碼,但是多模塊構建中這種情況非常常見,其中大多數代碼都位於一個或幾個模塊中,這些模塊比其他模塊大得多。這個場景是這類項目的近似——單個項目中包含了50000萬源文件和50000個測試文件。

大型單項目場景

Gradle在純淨構建時快2-3倍,在增量構建時快大約7倍,在Gradle任務輸出被緩存的時候快3倍。


性能對比總結


在所有場景下,Gradle都至少比Maven快2倍

當增量構建時,Gradle比Maven快7-85倍,子項目越多,Gradle快的越多

當Gradle的構建緩存可以解析任務輸出的時候,Gradle比Maven快3-30倍


Gradle的性能優勢


Gradle實現了大量策略來保證構建速度更快:

Gradle守護線程可以保證構建信息足夠新

針對各種類型任務的增量任務輸入和輸出確保不需要每次運行清理命令

增量編譯可以分析源文件和類文件之間的依賴關係,並只重新編譯改變的部分

當二進制接口沒有改變的時候,Gradle的智能類路徑分析器避免了不必要的編譯

利用Java類插件來提供更好的建模,減少了編譯時類路徑的體積,提高了性能

所有這些特性結合在一起,造成了Gradle和Maven巨大的性能差異。


解決Gradle速度慢的問題


好了,以上就是官網的一些說明,相信很多同學之前可能也試用過Gradle,但是發現性能不太理想。這裏我來解釋一下原因。


下載Gradle Wrapper慢


這應該是最常見的原因了,Gradle Wrapper可以說是一個好東西,不需要我們專門下載和配置Gradle,利用wrapper就可以自動下載指定版本的Gradle。wrapper會自動將命令代理到gradle上。這個東西的設計理想很美好,其實用起來也挺美好,但是對於國內的朋友就不太美好了。很多情況下我們連Maven官方源上的包都下不動, 更別說在專門下載Gradle了。

這個問題解決辦法有兩個,第一個是弄個代理,估計很多程序員爲了方便都會自己弄一個。第二個辦法是自己專門下一個Gradle,然後設置項目改用本地Gradle,這樣就會

避免每次wrapper的下載。


倉庫下載慢


這個問題很好解決,Maven的話我們可以設置鏡像倉庫,Gradle也支持這麼幹。

repositories {
    maven {
        url 'http://maven.aliyun.com/nexus/content/groups/public/'
    }
 
    jcenter()
}

Gradle運行速度慢


其實初次運行的話,Gradle和Maven速度差不多,當然還是Gradle稍快一些。有了構建數據之後,第二次運行應該會比Maven快很多,特別是如果你重複運行測試這些東西,而代碼沒有改動的話,Gradle幾乎是秒運行,原因上面也介紹過了。其中一個原因就是Gradle守護進程會在後臺不停地運行,收集各種數據。

如果你Gradle運行的速度很慢,可以注意一下運行的時候是不是需要重新運行守護進程,正常情況下僅僅第一次纔會運行。如果守護進程不斷重啓的話,可能是你機器內存不夠用,畢竟Gradle守護進程也是一個Java程序,內存不夠的話便會被殺掉。

這種情況沒有什麼好的解決辦法,基本上唯一辦法就是加內存。說實話8G內存可能不夠用, 有條件的話最好加到16G以上,守護進程就不會被系統殺掉了。

歡迎在留言區留下你的觀點,一起討論提高。如果今天的文章讓你有新的啓發,學習能力的提升上有新的認識,歡迎轉發分享給更多人。

歡迎各位讀者加入程序員小樂技術羣,在公衆號後臺回覆“加羣”或者“學習”即可。

猜你還想看

阿里、騰訊、百度、華爲、京東最新面試題彙集

Java 設計模式之責任鏈模式實現的三種方式

Java 線程的 5 個使用技巧

MyBatis 的9種設計模式,我猜你不一定知道!

關注「程序員小樂」,收看更多精彩內容

————————————————
版權聲明:本文爲CSDN博主「程序員小樂」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/xiaoxiaole0313/article/details/103535726

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