Maven - 概述
什么是 Maven?
Maven 是一个项目管理和理解工具,它为开发者提供了一个完整的构建生命周期框架。开发团队可以使用标准的目录布局和默认的构建生命周期,在几乎无需时间的情况下自动化项目的构建基础设施。
在多个开发团队的环境中,Maven 可以在很短的时间内按照标准设置工作方式。由于大多数项目设置简单且可重用,Maven 使开发者在创建报告、检查、构建和测试自动化设置时变得更加轻松。
Maven 为开发者提供了管理以下内容的方式 −
- Builds
- Documentation
- Reporting
- Dependencies
- SCMs
- Releases
- Distribution
- Mailing list
总之,Maven 简化并标准化了项目构建过程。它无缝处理编译、分发、文档、团队协作和其他任务。Maven 提高了可重用性,并处理了大多数与构建相关的任务。
Maven 演进
Maven 最初设计用于简化 Jakarta Turbine 项目中的构建过程。当时有多个项目,每个项目都包含略有不同的 ANT 构建文件。JAR 文件被签入 CVS。
Apache 集团随后开发了 Maven,它可以一起构建多个项目、发布项目信息、部署项目、在多个项目间共享 JAR,并帮助团队协作。
目标
Maven 的主要目标是为开发者提供以下内容 −
一个全面的项目模型,该模型可重用、可维护且易于理解。
与此声明性模型交互的插件或工具。
Maven 项目结构和内容在 xml 文件 pom.xml 中声明,该文件称为 Project Object Model (POM),它是整个 Maven 系统的基本单元。在后续章节中,我们将详细解释 POM。
约定优于配置
Maven 使用 Convention 优于 Configuration,这意味着开发者无需自己创建构建过程。
开发者不必提及每一个配置细节。Maven 为项目提供了合理的默认行为。当创建 Maven 项目时,Maven 会创建默认的项目结构。开发者只需相应放置文件,而无需在 pom.xml 中定义任何配置。
例如,下表显示了项目源代码文件、资源文件和其他配置的默认值。假设 ${basedir} 表示项目位置 −
| 项目 | 默认值 |
|---|---|
| source code | ${basedir}/src/main/java |
| Resources | ${basedir}/src/main/resources |
| Tests | ${basedir}/src/test |
| Complied byte code | ${basedir}/target |
| distributable JAR | ${basedir}/target/classes |
为了构建项目,Maven 为开发者提供了指定生命周期目标和项目依赖(依赖于 Maven 插件功能及其默认约定)的选项。许多项目管理和构建相关任务由 Maven 插件维护。
开发者可以构建任何给定的 Maven 项目,而无需了解单个插件的工作原理。我们将在后续章节中详细讨论 Maven Plugins。
Maven 的特性
遵循最佳实践的简单项目设置。
所有项目的一致使用。
包括自动更新的依赖管理。
庞大且不断增长的库仓库。
可扩展,能够轻松使用 Java 或脚本语言编写插件。
几乎无需额外配置即可立即访问新特性。
基于模型的构建 − Maven 能够将任意数量的项目构建成预定义的输出类型,如 jar、war、metadata。
项目信息的连贯站点 − 使用与构建过程相同的元数据,Maven 能够生成网站和 PDF,包括完整的文档。
发布管理和分发发布 − 无需额外配置,Maven 将与您的源代码控制系统(如 CVS)集成,并管理项目的发布。
向后兼容 − 您可以轻松将项目的多个模块从旧版本的 Maven 移植到 Maven 3。它也支持旧版本。
自动父版本管理 − 子模块中无需指定父模块以进行维护。
并行构建 − 它分析项目依赖图,并使您能够并行构建调度模块。使用此功能,您可以实现 20-50% 的性能提升。
更好的错误和完整性报告 − Maven 改进了错误报告,并为您提供指向 Maven wiki 页面的链接,在那里您可以获得错误的完整描述。