前言
java世界中主要有三大构建工具:ant、maven和gradle。经过几年的发展,ant几乎销声匿迹、maven是用的普遍的一种,而gradle目前也越来越受追捧。笔者有幸见证了maven的热潮和gradle的兴起。maven的主要功能主要分为5点,分别是依赖管理系统、多模块构建、一致的项目结构、一致的构建模型和插件机制。maven与gradle在使用中各有千秋,根据使用场景择优用之。
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'
优点: 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仓库兼容
- 当出现依赖冲突时

- mavenc依赖冲突.png
- maven依赖解调遵循两个原则,路径最近原则以及定义顺序原则
- gradle的冲突解析则是选用新的版本(新的版本一般都会向下兼容)
总结:
maven
- 稳定可靠,插件众多。(这么多年版本一直维持在3.xx,而且很久才发布一次小更新,说明他稳定且bug较少)

- 略显啰嗦,自定义逻辑较麻烦(maven使用xml的方式进行配置,xml的劣势繁琐就会体现在maven上)

- 大型项目会逐渐遇到性能问题
- 使用maven构建的项目都会经过几个生命流程,内部没有缓存机制,项目越来越大重新构建所花费的时间也就越长。
- 由于maven的开发基本靠社区支持,没有更多的资金用于继续开发维护maven,导致开发基本停泻。
- gradle
- gradle采用代码逻辑的方式进行构建,使得它能更加的灵活。
- gradle内部存在缓存机制(当文件输入和输出都没改变的情况下,认为这就是没变的代码,直接进行输出。但当你改变的依赖包版本,它有时并没更新,也是缓存机制的问题),相比会快些。
- 开发活跃,版本太多
到此这篇关于maven与gradle的区别的文章就介绍到这了,更多相关maven与gradle的区别,maven与gradle的区别内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论