Maven - 概述

什么是 Maven?

Maven 是一个项目管理和理解工具,它为开发人员提供了一个完整的构建生命周期框架。 由于 Maven 使用标准目录布局和默认构建生命周期,开发团队几乎可以立即自动化项目的构建基础架构。

在多个开发团队环境的情况下,Maven 可以在很短的时间内按照标准设置工作方式。 由于大多数项目设置都很简单且可重复使用,因此 Maven 在创建报告、检查、构建和测试自动化设置时让开发人员的生活变得轻松。

Maven 为开发人员提供了管理以下内容的方法 −

  • 构建
  • 文档
  • 报告
  • 依赖项
  • SCM
  • 发布
  • 分布
  • 邮件列表

总而言之,Maven 简化并标准化了项目构建过程。 它无缝地处理编译、分发、文档、团队协作和其他任务。 Maven 增加了可重用性并处理了大多数与构建相关的任务。


Maven 进化

Maven 最初旨在简化 Jakarta Turbine 项目中的构建过程。 有几个项目,每个项目包含略有不同的 ANT 构建文件。 JAR 被检入 CVS。

Apache 小组随后开发了 Maven,它可以一起构建多个项目、发布项目信息、部署项目、在多个项目之间共享 JAR 并帮助团队协作。


目标

Maven 的主要目标是为开发人员提供以下内容 −

  • 一个全面的项目模型,可重用、可维护且更易于理解。

  • 与此声明性模型交互的插件或工具。

Maven项目结构和内容在一个xml文件pom.xml中声明,称为项目对象模型(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 插件。


Maven 的特点

  • 遵循最佳实践的简单项目设置。

  • 所有项目的使用一致。

  • 依赖管理,包括自动更新。

  • 一个庞大且不断增长的库存储库。

  • 可扩展,能够轻松地用 Java 或脚本语言编写插件。

  • 无需或无需额外配置即可立即访问新功能。

  • 基于模型的构建 − Maven 能够将任意数量的项目构建为预定义的输出类型,例如 jar、war、元数据。

  • 项目信息的相关站点 − 使用与构建过程相同的元数据,maven 能够生成一个网站和一个包含完整文档的 PDF。

  • 发布管理和分发出版物 − 无需额外配置,maven 将与您的源代码控制系统(例如 CVS)集成并管理项目的发布。

  • 向后兼容性 − 您可以轻松地将项目的多个模块从旧版本的 Maven 移植到 Maven 3。 它也可以支持旧版本。

  • 自动父版本控制 − 无需在子模块中指定父节点进行维护。

  • 并行构建 − 它分析项目依赖关系图并使您能够并行构建计划模块。 使用它,您可以实现 20-50% 的性能提升。

  • 更好的错误和完整性报告 − Maven 改进了错误报告,它为您提供了一个指向 Maven wiki 页面的链接,您将在其中获得错误的完整描述。