Maven 除了以程序构建能力为特色之外,还提供 Ant 所缺少的高级项目管理工具。由于 Maven 的缺省构建规则有较高的可重用性,所以常常用两三行 Maven 构建脚本就可以构建简单的项目,而使用 Ant 则需要十几行。事实上,由于 Maven 的面向项目的方法,许多 Apache Jakarta 项目现在使用 Maven,而且公司项目采用 Maven 的比例在持续增长。
那么,Maven 和 Ant 有什么不同呢?在回答这个问题以前,我要强调一点:Maven 和 Ant 针对构建问题的两个不同方面。Ant 为 Java 技术开发项目提供跨平台构建任务。Maven 本身描述项目的高级方面,它从 Ant 借用了绝大多数构建任务。因此,由于 Maven 和 Ant 代表两个差异很大的工具,所以我将只说明这两个工具的等同组件之间的区别,如表 1 所示。
|
Maven | Ant |
标准构建文件 | project.xml 和 maven.xml | build.xml |
特性处理顺序 |
|
|
构建规则 | 构建规则更为动态(类似于编程语言);它们是基于 Jelly 的可执行 XML。 |
构建规则或多或少是静态的,除非使用 <script> 任务。(请参阅 参考资料以获得相关教程。) |
扩展语言 | 插件是用 Jelly(XML)编写的。 | 插件是用 Java 语言编写的。 |
构建规则可扩展性 |
通过定义 <preGoal> 和 <postGoal> 使构建 goal 可扩展。 |
构建规则不易扩展;可通过使用 <script> 任务模拟<preGoal> 和 <postGoal> 所起的作用。 |
既然您了解了 Maven 和 Ant 之间的区别,让我们来研究 Maven 的主要组件,如图 1 所示。
图 1. Maven 的主要组件
项目对象模型(Project Object Model,POM)描述项目的各个方面。尽管对于 POM 的物理表示没有内在的限制,但 Maven 开发人员通常使用一个 XML 项目文件(project.xml)。该 XML 文件格式由位于 Maven 安装目录中的 XML 模式(maven-project.xsd)定义。
通常,project.xml 文件由三个主要部分组成:
- 项目管理部分包括项目的组织、开发人员名单、源代码位置和错误跟踪系统 URL 等信息。
- 项目相关性部分包括关于项目相关性的信息。当前 Maven 实现(1.0 beta 测试版 8)仅支持 JAR 文件相关性。
- 项目构建和报告部分包含项目构建信息(如源代码目录、单元测试用例目录)和要在构建中生成的报告。
清单 1 显示了带注释的样本 project.xml 文件。因为 project.xml 文件中的许多元素都是可选的,所以,随着您对 Maven 理解的加深,可以逐步使用不同的 Maven 特性。 注:在以下代码中,可选的元素都以“可选的(OPTIONAL)”标明。
主文档包含项目的唯一标识和组标识。事实证明,当项目包括多个子项目时,组标识非常有用。所有的子项目应共享同一组标识,但每个子项目应有不同的 <id>
。
groupId | 告诉 Maven 资源库内哪个子目录中包含相关性文件。 |
artifactId | 告诉 Maven 该构件的唯一标识。 |
version | 表示相关性的版本号。 |
jar |
(可选的)表示相关性的 JAR 文件。在绝大多数情况下,可以从相关性的 <artifactId> 和 <version> 构造 JAR 文件的名称。 |
type | (可选的)相关性的类型;如 jar 和分发版等。缺省值是 jar。 |
url | (可选的)相关性项目的 URL,在相关性是在因特网上找到的第三方库时非常有用。 |