在java开发中,我们都会用到一些构建工具,常用的构建工具有Ant、Maven、Gradle。经过这么多年的发展,终于Ant几乎快销声匿迹了,Maven和Gradle在项目开发中用得比较多,其中以Gradle发展得最好。
![2f48e35b03da2ac8f85d5396b7cb68d2.png](https://i-blog.csdnimg.cn/blog_migrate/07154d86e60aeb074ff2fce8f6f71281.jpeg)
Maven的主要功能是多模块构建、依赖管理系统、一致的项目结构、一致的项目构建模型和插件机制。在此,我将以这5点来做一个区分。
1.0多模块构建
![0f9a714c9cd78f301e5668aee55e8927.png](https://i-blog.csdnimg.cn/blog_migrate/6c24d1b6e4a7a18f86fe51534239981f.jpeg)
在现在的项目中,一般我们会将一个项目分解是多个模块。在Maven中需要定义一个parent POM作为一组module的通用配置,我们可以用标签来定义一组子模块
在Gradle也支持多模块构建,在parent的build.gradle中可以使用subprojects和allprojects定义所有的子模块。对于子模块的定义可以放在setting.gradle文件中。
2.0依赖管理系统
![2b6df5c4de564b2a6dd534736a17448d.png](https://i-blog.csdnimg.cn/blog_migrate/8ce16e7b522ac3cbe2faa0d5c15ecaa9.jpeg)
在Maven中,可以用GroupID、ArtifactID、Version组成一个唯一的标识。任何Maven项目都必须要定义这三个属性。GroupID相当于package,ArtifactID相当于Class。
Gradle支持动态的版本依赖,在版本号后面使用+号可以实现动态的版本管理。
3.0一致的构建模型
![f1b913ad6947b65b1c478d37587fe706.png](https://i-blog.csdnimg.cn/blog_migrate/05eb0ec230e2c5549c376baca0f419eb.jpeg)
Maven设置了标准的项目周期,包含验证、初始化、生成原始的数据、处理原始数据、生成资源、处理资源、编译、处理类。。。。等等。而Gradle更加的灵活,可以创建一个task,并随时通过depends建立与已有task的依赖关系
4.0一致的项目结构
![e2c37b902f7d8945501d8b6b8a7fe749.png](https://i-blog.csdnimg.cn/blog_migrate/9ea0b1f3dfc6cfab0c8cebb70998fc3d.jpeg)
Maven指定了一套标准的项目结构作为java项目结构,Gradle也是沿用了这套标准。在Gradle中只需在文件中包含applyplugin:'java',系统既可以自动识别
5.0插件机制
两者都采用了插件机制