简介
Apache Maven 是一个项目管理的工具。基于 项目对象模型POM(project object model)思想。 它可以帮助你管理项目的编译,文档,报告等实施过程。
maven 是依地语的一个单词,意思是技术收集者。这个项目的启动是一次尝试,希望能够简化印度首都雅加达当时的一个涡轮工程项目的构建过程。当时我们已经有了好几个用Ant构建项目,每一个项目的Ant构建文件都只是轻微的不同,这些构建文件以及jar包都需要被 CVS(中央版本控制系统) 所管理。我们迫切需要一个标准的流程来构建项目,一个简明的声明文件来描述项目的组成,以及更简易的发布项目文档,分享jar包的方法。因此我们写了这个工具。
Maven的目标
让开发者能在最短的时间内了解一个项目的完整状态
- 让构建过程更简单
- 提供统一的构建系统
- 提供高质量的项目文档
- 提供最佳的项目实践指南
- 无感知的迁入新功能
让构建过程更简单
虽然使用Maven并不能消除你对底层机制知识的需要,但Maven确实可以帮你屏蔽很多细节知识
提供统一的构建系统
Maven使用POM以及一系列插件来提供一个统一的构建系统。一旦你熟悉了Maven,你就能驾驭所有用Maven构建的项目
提供高质量的项目文档
Maven 可以输出大量有用的文档,这些信息一部分来自你的POM文件,一部分来自于项目项目源码。比如:
- 修改日志文档:数据来自于版本控制系统 git svn cvs
- 引用文档
- 邮件列表
- 依赖列表
- 单元测试报告以及覆盖率
当Maven改进了这些文档的内容,这些修改对开发者来说都是透明的。开发者同样可以通过一些插件,来修改这些文档的格式内容。
提供项目最佳实践的指南
Maven收集了目前最佳项目实践的理论,让开发者更简单的将它们用在项目开发上。
举个例子,规格说明书,运行,以及单元测试报告都是Maven构建圈中的常见部分。当前单元测试的最佳实践指南如下:
- 将测试代码保存在一个单独,但并行于源码的目录中
- 使用测试用例的名字来定位和执行测试
- 有测试样例来构建测试环境,不依赖自定义的测试准备脚本
Maven 也希望能优化项目实施流程,比如说发布管理,以及 issue 跟进。同时也提供了一些项目目录结构上的指南
无感知的迁入新功能
Maven 提供了一个简单的方法让Maven客户端自动更新安装。所以安装新的Maven版本以及更新第三方插件都是没什么意义的
Maven 不是什么
你可能听过下面一些对Maven的观点
- Maven 是一个站点及文档工具
- Maven 拓展了Ant 并且让你下载依赖
- Maven 是可重用的Ant 脚本集合
在Maven的目标栏目提到的功能,只是冰山一角。它们与Maven的目标还有有点不一样的。
Maven 提倡项目的最佳实践,但我们认识到有些项目基于历史原因可能无法使用这些实践想法。当Maven 需要考虑灵活性,来适应具有这些情况的项目,它就不可能不折损自身的目标。如果你决定使用Maven, 并且有一个不同寻常的构建结构,你就需要适当放弃一些Maven的特性。