Gradle VS Maven
Gradle作为开源的自动化构建系统,使用基于编程语言Groovy的特定领域语言。
在2007年首次发布,2013年,Gradle被Google采用为Android项目的构建系统。
Gradle支持多项目构建。
Gradle支持允许增量构建,能够检测哪些部分是更新的。
Maven也是开源的自动化构建系统,使用XML文件来描述构建的项目、软件与第三方模块和部件的依赖关系、构建顺序以及所需的插件。包装和编译等任务都有预定义的目标。
Maven会从不同的仓库中下载库和插件,然后将它们全部放在本地机器的缓存中。 虽然主要用于Java项目,也可以将其用于Scala、Ruby和C#,以及其他许多语言。
GRADLE |
MAVEN |
Gradle是基于任务依赖的。 |
Maven是基于固定的、线性的阶段模型,目标被附加在项目阶段上,而目标的功能与Gradle的任务类似。 |
Gradle和Maven都支持并行构建 |
|
Gradle支持增量构建,可以大大缩减构建时间。 其他构建特性: 1. Java类的增量编译 2. 避免不必要的Java编译 3. 递增式子任务的API使用 4. 编译器守护进程,也让编译速度快了很多。 |
Maven不支持增量构建 |
Gradle和Maven都可以处理动态和转义的依赖关系,使用第三方依赖缓存,并读取POM元数据格式。 可以通过中心版本定义来声明库的版本,并强制执行中心版本。 两者都可以从其工件库中下载过渡性依赖。Maven有Maven Central,而Gradle有JCenter,你也可以定义自己的私人公司仓库。 |
|
Gradle在API和实现依赖性方面胜出, 同时允许并发安全缓存。 能将仓库元数据与缓存依赖一起保存,确保使用同一缓存的两个或多个项目不会相互覆盖,而且它有一个基于校验的缓存,可以与仓库同步缓存。 此外,Gradle兼容IVY Metadata,允许你定义自定义规则,为动态依赖指定版本,解决版本冲突。 其他只有在Gradle上才能找到的依赖性管理功能有: 在兼容库中使用替换规则 ReplacedBy规则的使用 更好地解决元数据问题 能够动态地用外部依赖关系替换项目依赖关系,反之亦然。 |
这些在Maven上是无法实现的 |
Gradle可以比Maven更容易处理复合构建 |
|
就执行模型而言,两者都有任务组和描述。两者都能让你只构建指定的项目及其依赖关系。 |
|
Gradle有一个完全可配置的DAG |
在Maven中,一个目标只能附加在一个其他目标上。多个目标采取的是有序列表的形式。 |
Gradle还允许任务排除、转义排除和任务依赖性推断。 Gradle还有任务排序和最终确定器等高级功能。 |
Maven没有这些功能 |
管理构建基础架构方面, Gradle使用接受自动供应的包装器。 Gradle还可以让你配置基于版本的构建环境,而无需手动设置这些环境。它还允许自定义发布。 |
使用Maven,你需要有一个扩展来支持自供应构建。 |
在定制化方面, 使用Maven,你可以很容易地定义项目的元数据和依赖关系,但创建一个高度定制的构建可能是Maven用户的噩梦。随着项目的发展,POM文件很容易变得臃肿,以后可能就是一个无法读取的XML文件。
依赖管理和目录结构方面。Maven是提供了简单而有效的依赖管理,由于它为你的项目提供了一个目录结构,所以你的所有项目都有某种标准的布局。它的POM文件使用的是声明式的XML文件,并且有大量的插件可以使用。Gradle使用的是你在Maven上看到的目录结构,但这是可以定制的。它还使用与Maven相同的GAV格式来识别工件。
插件和集成方面。Maven还支持多种构建生命周期步骤,并与第三方工具无缝集成,如CI服务器、代码覆盖插件和工件仓库系统等。就插件而言,现在可用的插件越来越多,有大型厂商都有兼容Gradle的插件。不过,与Gradle的可用插件数量相比,Maven的可用插件还是比较多的。
灵活性方面。Gradle非常灵活,它是基于脚本的。在Gradle上进行自定义构建会很容易。然而,由于Gradle实际上是一个新事物,所以对Gradle了如指掌的开发者数量比较有限。
最后,选择什么主要取决于你的需求。Gradle的功能更强大。Maven最适合小项目,而Gradle最适合大项目。
- 点赞
- 收藏
- 关注作者
评论(0)