Maven與Gradle的區(qū)別對比分析
前言
Java世界中主要有三大構(gòu)建工具:Ant、Maven和Gradle。經(jīng)過幾年的發(fā)展,Ant幾乎銷聲匿跡、Maven是用的普遍的一種,而Gradle目前也越來越受追捧。筆者有幸見證了Maven的熱潮和Gradle的興起。Maven的主要功能主要分為5點,分別是依賴管理系統(tǒng)、多模塊構(gòu)建、一致的項目結(jié)構(gòu)、一致的構(gòu)建模型和插件機制。Maven與Gradle在使用中各有千秋,根據(jù)使用場景擇優(yōu)用之。
1. Maven 與 Gradle 對比
maven要引入依賴 pom.xml
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-web -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.1.5.RELEASE</version>
</dependency>而Gradle引入 build.gradle
implementation?'org.springframework.boot:spring-boot-starter-web'
優(yōu)點: Gradle 相當(dāng)于 Maven 與 Ant 的合體
缺點: 對于微服務(wù)多項目的子類引用,不如 Maven
Maven
- 項目結(jié)構(gòu)/依賴由pom.xml定義
- 生產(chǎn)代碼存放在src/main/java下
- 測試代碼存放在src/test/java下
Gradle
- 項目結(jié)構(gòu)/依賴由build.gradle定義
- 生產(chǎn)代碼存放在src/main/java下
- 測試代碼存放在src/test/java下
2. 構(gòu)建流程和生命周期
- Maven
- 三個標準的生命周期(lifecycle)
- 最小的運行單元是目標(goal)
- 插件可以把自己的目標綁定在生命周期的某個階段(phase)上
- Gradle
- 沒有顯示的生命周期
- 最小的運行單元是任務(wù)(task),任務(wù)之間可以相互依賴
- 可以動態(tài)地創(chuàng)建任務(wù)
3. 包管理和傳遞性依賴
- Maven
- 一個包由groupId/artifactId/version確定唯一坐標
- 包來源于中央倉庫
- 傳遞性依賴
- 當(dāng)某個包的的使用依賴于其他包時,Maven會自動導(dǎo)入所有的依賴包
- Gradle
- 使用Ivy的構(gòu)件系統(tǒng),是Maven的構(gòu)件系統(tǒng)的超集
Ant ivy是一個比Maven倉庫更加廣闊的倉庫
- 與Maven倉庫兼容
- 當(dāng)出現(xiàn)依賴沖突時

- Mavenc依賴沖突.png
- Maven依賴解調(diào)遵循兩個原則,路徑最近原則以及定義順序原則
- Gradle的沖突解析則是選用新的版本(新的版本一般都會向下兼容)
總結(jié):
Maven
- 穩(wěn)定可靠,插件眾多。(這么多年版本一直維持在3.XX,而且很久才發(fā)布一次小更新,說明他穩(wěn)定且bug較少)

- 略顯啰嗦,自定義邏輯較麻煩(Maven使用xml的方式進行配置,xml的劣勢繁瑣就會體現(xiàn)在Maven上)

- 大型項目會逐漸遇到性能問題
- 使用Maven構(gòu)建的項目都會經(jīng)過幾個生命流程,內(nèi)部沒有緩存機制,項目越來越大重新構(gòu)建所花費的時間也就越長。
- 由于Maven的開發(fā)基本靠社區(qū)支持,沒有更多的資金用于繼續(xù)開發(fā)維護Maven,導(dǎo)致開發(fā)基本停瀉。
- Gradle
- Gradle采用代碼邏輯的方式進行構(gòu)建,使得它能更加的靈活。
- Gradle內(nèi)部存在緩存機制(當(dāng)文件輸入和輸出都沒改變的情況下,認為這就是沒變的代碼,直接進行輸出。但當(dāng)你改變的依賴包版本,它有時并沒更新,也是緩存機制的問題),相比會快些。
- 開發(fā)活躍,版本太多
到此這篇關(guān)于Maven與Gradle的區(qū)別的文章就介紹到這了,更多相關(guān)Maven與Gradle的區(qū)別,Maven與Gradle的區(qū)別內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- gradle和maven有哪些區(qū)別
- Java程序打包常見幾種方式的完整步驟(Maven/Gradle/?手動打包)
- java中g(shù)radle項目報錯org.gradle?.api.plugins.MavenPlugin解決辦法
- Java?Maven構(gòu)建工具中mvnd和Gradle誰更快
- Java中的maven和gradle的比較與使用詳解
- gradle使用maven-publish發(fā)布jar包上傳到私有maven配置
- 常用Maven庫,鏡像庫及maven/gradle配置(小結(jié))
- IDEA配置java開發(fā)環(huán)境(maven、gradle、tomcat)
相關(guān)文章
Eclipse 出現(xiàn)A configuration with this name already exists問題解決方
這篇文章主要介紹了Eclipse 出現(xiàn)A configuration with this name already exists問題解決方法的相關(guān)資料,需要的朋友可以參考下2016-11-11
如何將JSON字符串?dāng)?shù)組轉(zhuǎn)對象集合
這篇文章主要介紹了如何將JSON字符串?dāng)?shù)組轉(zhuǎn)對象集合,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-06-06
Java使用ByteBuffer進行多文件合并和拆分的代碼實現(xiàn)
因為驗證證書的需要,需要把證書文件和公鑰給到客戶,考慮到多個文件交互的不便性,所以決定將2個文件合并成一個文件交互給客戶,但是由于是加密文件,采用字符串形式合并后,拆分后文件不可用,本文給大家介紹了Java使用ByteBuffer進行多文件合并和拆分,需要的朋友可以參考下2024-09-09
SecurityUtils.getSubject().getPrincipal()為null的問題
這篇文章主要介紹了SecurityUtils.getSubject().getPrincipal()為null的問題及解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-07-07
SpringBoot?SpringSecurity?JWT實現(xiàn)系統(tǒng)安全策略詳解
Spring?Security是Spring的一個核心項目,它是一個功能強大且高度可定制的認證和訪問控制框架。它提供了認證和授權(quán)功能以及抵御常見的攻擊,它已經(jīng)成為保護基于spring的應(yīng)用程序的事實標準2022-11-11

