关于Maven在工程项目中的定义
首先先看关于Maven的定义
Apache Maven,是一个软件(特别是Java软件)项目管理及自动构建工具,由Apache软件基金会所提供。基于项目对象模型(缩写:POM)概念,Maven利用一个中央信息片断能管理一个项目的构建、报告和文档等步骤。
Maven也可被用于构建和管理各种项目,例如C#,Ruby,Scala和其他语言编写的项目。Maven曾是Jakarta项目的子项目,现为由Apache软件基金会主持的独立Apache项目。
Maven的目标
Maven的主要目标是让开发人员在最短的时间内理解开发工作的完整状态。为了实现这一目标,Maven试图处理以下几个方面的问题:
- 使构建过程变得简单
- 提供统一的构建系统
- 提供优质的项目信息
- 提供最佳实践开发指南
- 允许透明迁移到新功能
使构建过程变得简单
虽然使用Maven并不能消除对底层机制的了解,但Maven确实提供了很多屏蔽细节。
提供统一的构建系统
Maven允许项目使用其项目对象模型(POM)和一组使用Maven由所有项目共享的插件进行构建,从而提供统一的构建系统。一旦您熟悉了Maven项目的构建方式,您就会自动了解所有Maven项目的构建方式,从而在尝试导航许多项目时节省了大量时间。
提供优质的项目信息
Maven提供了大量有用的项目信息,这些信息部分来自您的POM,部分来自您项目的来源。例如,Maven可以提供:
- 更改直接从源代码管理创建的日志文档
- 交叉引用的来源
- 项目管理的邮件列表列表
- 依赖列表
- 单元测试报告包括报道
随着Maven的改进,所提供的信息集将得到改善,所有这些对Maven的用户都是透明的。
其他产品也可以提供Maven插件,以允许他们的项目信息以及Maven提供的一些标准信息,所有这些信息仍然基于POM。
提供最佳实践开发指南
Maven旨在收集最佳实践开发的现行原则,并使指导项目朝这个方向变得容易。
例如,单元测试的规范,执行和报告是使用Maven的正常构建周期的一部分。目前的单元测试最佳实践被用作指南:
- 将测试源代码保存在单独但并行的源代码树中
- 使用测试用例命名约定来定位和执行测试
- 让测试用例设置他们的环境,而不是依赖于自定义构建以进行测试准备
Maven还旨在协助项目工作流程,例如发布和问题管理。
Maven还建议了一些关于如何布局项目目录结构的指南。学习布局后,您可以轻松浏览使用Maven和相同默认值的任何其他项目。
允许透明迁移到新功能
Maven为Maven客户端提供了一种简单的方法来更新他们的安装,以便他们可以利用对Maven本身所做的任何更改。
出于这个原因,从第三方或Maven本身安装新的或更新的插件已经变得微不足道了。
Maven的作用
- 在开发中,为了保证编译通过,我们会到处去寻找jar包,当编译通过了,运行的时候,却发现"ClassNotFoundException",我们想到的是,难道还差jar包?
- 每个Java项目的目录结构都没有一个统一的标准,配置文件到处都是,单元测试代码到底应该放在那里也没有一个权威的规范。
- 因此,我们就要用到Maven(使用Ant也可以,不过编写Ant的xml脚本比较麻烦)----一个项目管理工具。
- Maven主要做了两件事:
- 统一开发规范与工具
- 统一管理jar包
由此可以看出Maven最主要的体现在了哪2个词?——对了,“项目”和“管理”!加在一起就是项目管理。项目管理是一个很抽象的概念。项目管理既可以指技术上的管理手段,也可以指“以人为本”的非技术因素。诚然,无论是技术还是非技术,项目的成败最大的责任人其实就是项目经理。这里我们抛开人为因素不提,仅就技术上来说,Maven提供了一种思想让团队更科学的管理、构建项目。用配置文件的方式对项目的描述、名称、版本号、项目依赖等等信息进行描述。使之项目描述结构清晰,任何人接手的成本比较低。在项目构建时,利用Maven的“约定大于配置”的思想,可以比Ant脚本构建项目省去不少配置文件的内容。而且一个项目可能依赖于其他的项目和第三方的组件才能顺利完成,Maven提供了仓库的概念,让这些依赖项放进仓库中,项目想要从仓库中去取,其他项目组也需要,OK,从仓库中去取,不必每个人去开源项目的站点去苦苦搜寻了。如此人员的成本、软件维护的成本、沟通的成本、硬件的成本都降下来了。客户笑了、公司老板也笑了、项目经理笑了、团队里面的人员也笑了、Apache社区看到这么多人在用也笑了。现在的开源东西越来越向“敏捷开发”、“极限编程”的方向靠拢。通过Maven辅助管理项目,更能发现项目中哪些模块是重复的轮子。