当前位置: 首页 > news >正文

Maven与Gradle的区别

-


## 前言

Java世界中主要有三大构建工具:Ant、Maven和Gradle。经过几年的发展,Ant几乎销声匿迹、Maven是用的普遍的一种,而Gradle目前也越来越受追捧。笔者有幸见证了Maven的热潮和Gradle的兴起。Maven的主要功能主要分为5点,分别是依赖管理系统、多模块构建、一致的项目结构、一致的构建模型和插件机制。Maven与Gradle在使用中各有千秋,根据使用场景择优用之。

1. Maven 与 Gradle 对比

maven要引入依赖 pom.xml

`

org.springframework.boot
spring-boot-starter-web
2.1.5.RELEASE
`

而Gradle引入 build.gradle

implementation 'org.springframework.boot:spring-boot-starter-web'

优点: Gradle 相当于 Maven 与 Ant 的合体 

缺点: 对于微服务多项目的子类引用,不如 Maven

Maven

项目结构/依赖由pom.xml定义


-
生产代码存放在src/main/java下


-
测试代码存放在src/test/java下


Gradle

-
项目结构/依赖由build.gradle定义


-
生产代码存放在src/main/java下


-
测试代码存放在src/test/java下

2. 构建流程和生命周期

-
Maven

三个标准的生命周期(lifecycle)
- 最小的运行单元是目标(goal)
- 插件可以把自己的目标绑定在生命周期的某个阶段(phase)上
-
Gradle

没有显示的生命周期
- 最小的运行单元是任务(task),任务之间可以相互依赖
- 可以动态地创建任务

3. 包管理和传递性依赖

-
Maven

一个包由groupId/artifactId/version确定唯一坐标
- 包来源于中央仓库
- 传递性依赖
当某个包的的使用依赖于其他包时,Maven会自动导入所有的依赖包
-
Gradle


使用Ivy的构件系统,是Maven的构件系统的超集

>
Ant ivy是一个比Maven仓库更加广阔的仓库


-
与Maven仓库兼容


-
当出现依赖冲突时

Maven依赖解调遵循两个原则,路径最近原则以及定义顺序原则
![](https://i-blog.csdnimg.cn/blog_migrate/2cc9282326653806c2c0c48d851dea2b.png)

Mavenc依赖冲突.png

- Gradle的冲突解析则是选用新的版本(新的版本一般都会向下兼容)
总结:

Maven

- 稳定可靠,插件众多。(这么多年版本一直维持在3.XX,而且很久才发布一次小更新,说明他稳定且bug较少)
![](https://i-blog.csdnimg.cn/blog_migrate/5d3aee4cbd904dc288fb1fc130172930.png)

- 略显啰嗦,自定义逻辑较麻烦(Maven使用xml的方式进行配置,xml的劣势繁琐就会体现在Maven上)
![](https://i-blog.csdnimg.cn/blog_migrate/248b3d634c0bdd3de1c9b4d335817680.png)

-
大型项目会逐渐遇到性能问题

使用Maven构建的项目都会经过几个生命流程,内部没有缓存机制,项目越来越大重新构建所花费的时间也就越长。
-
由于Maven的开发基本靠社区支持,没有更多的资金用于继续开发维护Maven,导致开发基本停泻。


-
Gradle

Gradle采用代码逻辑的方式进行构建,使得它能更加的灵活。
-
Gradle内部存在缓存机制(当文件输入和输出都没改变的情况下,认为这就是没变的代码,直接进行输出。但当你改变的依赖包版本,它有时并没更新,也是缓存机制的问题),相比会快些。


-
开发活跃,版本太多

![](https://i-blog.csdnimg.cn/blog_migrate/c6588a897387ffefcdda1428dcd8e7dd.jpeg)同名原创公众号:程序大视界

http://www.jsqmd.com/news/922374/

相关文章:

  • 终极网盘下载加速指南:3步实现直链解析与高速文件传输
  • 2026年珍珠棉厂家推荐排行榜:EPE珍珠棉/防震包装/五金电子包装/玻璃制品缓冲内衬/高密度珍珠棉卷材护角优选 - 企业推荐官【官方】
  • AI与大模型新闻日报 | 2026-05-31
  • 魔兽争霸3优化终极指南:5分钟解决现代电脑兼容性问题
  • 别再被间歇振荡搞懵了!用LTspice仿真RCC开关电源,从轻载到满载的完整避坑指南
  • 手把手教你用VMware安装华为EulerOS 2.0 SP5(附详细分区与开发环境配置)
  • 常州环创再生资源科技:江苏专业的废保护器回收公司怎么联系 - LYL仔仔
  • 西安曲江家政服务怎么选?2026曲江家政公司评测与实战落地指南 - 资讯快报
  • QMCDecode终极指南:3步快速解锁QQ音乐加密文件,免费实现音乐自由
  • Qt版本管理实战:从5.12.3平滑降级到5.9.8,并让VS2022同时识别多个Qt版本
  • 商业智能中AI的认知陷阱:如何识别与防范“听起来正确”的危险结论
  • 告别版本混乱!在Ubuntu 22.04上管理多个.NET SDK(8.0/6.0/7.0)的保姆级指南
  • 5个创意用法解锁Parsec-vdd虚拟显示器的隐藏潜力
  • AI赋能Web3营销:从数据洞察到个性化对话的实战指南
  • Visual Studio里那个烦人的C2143语法错误,我总结了新手最常踩的3个坑(附排查清单)
  • OBS StreamFX:免费打造专业级直播画面的终极特效插件
  • 新郑震捷再生资源:荥阳专业的废旧物资拆除公司有哪些 - LYL仔仔
  • D3KeyHelper终极指南:5分钟掌握暗黑3自动化战斗技能宏工具
  • 别等硬盘挂了才后悔!保姆级教程:用smartctl给你的Linux服务器硬盘做个全面体检(附关键指标解读)
  • 从N-gram到ChatGPT:语言模型的技术演进与核心原理剖析
  • 告别网盘限速烦恼:9大平台直链下载助手完全指南
  • 微信通讯录大扫除:如何用WechatRealFriends揪出那些悄悄删除你的“好友“
  • 市政设施三维智慧运维整体解决方案(2026完整版)
  • Online-disk-direct-link-download-assistant:深度解析网盘直链解析技术原理与优化配置
  • 如何高效实现抖音无水印视频下载:开源工具的完整实践指南
  • Debian11最小化安装后,浏览器中文乱码?5分钟搞定中文字体配置(附常用字体包清单)
  • vscode如何免秘钥登入Ubuntu
  • 别再死记硬背了!用这5个高频场景,帮你彻底搞懂Docker常用命令(附CentOS/Ubuntu实战)
  • 宏洛图 (HONGLT) 设计|重塑男士理容新境 —— 高端男士化妆品包装全案设计哲学 - 宏洛图品牌设计
  • 别再死磕传统LOD了!用UE5的Nanite做开放世界,我踩过的坑和最佳实践