- Maven 教程
- Maven - 首页
- Maven - 概述
- Maven - 环境搭建
- Maven - POM
- Maven - 构建生命周期
- Maven - 构建配置文件
- Maven - 仓库
- Maven - 插件
- Maven - 创建项目
- Maven - 构建和测试项目
- Maven - 外部依赖
- Maven - 项目文档
- Maven - 项目模板
- Maven - 快照
- Maven - 构建自动化
- Maven - 依赖管理
- Maven - 部署自动化
- Maven - Web 应用
- Maven - Eclipse IDE
- Maven - NetBeans
- Maven - IntelliJ IDEA
- Maven 有用资源
- Maven - 常见问题解答
- Maven - 快速指南
- Maven - 有用资源
- Maven - 讨论
Maven - 概述
什么是 Maven?
Maven 是一款项目管理和理解工具,它为开发人员提供了一个完整的构建生命周期框架。由于 Maven 使用标准目录布局和默认构建生命周期,开发团队几乎可以立即自动化项目的构建基础设施。
在多个开发团队的环境中,Maven 可以很快地建立起按照标准工作的方式。由于大多数项目设置都很简单且可重用,因此 Maven 在创建报告、检查、构建和测试自动化设置时,简化了开发人员的工作。
Maven 为开发人员提供了管理以下方面的方法:
- 构建
- 文档
- 报告
- 依赖
- SCM(版本控制系统)
- 发布
- 分发
- 邮件列表
总而言之,Maven 简化和标准化了项目构建过程。它可以无缝地处理编译、分发、文档、团队协作和其他任务。Maven 提高了可重用性,并处理了大多数与构建相关的任务。
Maven 的发展
Maven 最初是为了简化 Jakarta Turbine 项目中的构建过程而设计的。当时有多个项目,每个项目都包含略微不同的 ANT 构建文件。JAR 文件被签入 CVS。
Apache 集团随后开发了 **Maven**,它可以一起构建多个项目,发布项目信息,部署项目,在多个项目之间共享 JAR 文件,并帮助团队协作。
目标
Maven 的主要目标是为开发人员提供以下功能:
一个全面且可重用、易于维护和理解的项目模型。
与这个声明式模型交互的插件或工具。
Maven 项目的结构和内容在一个名为 pom.xml 的 XML 文件中声明,称为项目对象模型 (POM),它是整个 Maven 系统的基本单元。在后面的章节中,我们将详细解释 POM。
约定优于配置
Maven 使用 **约定** 优于 **配置**,这意味着开发人员无需自己创建构建过程。
开发人员不必提及每一个配置细节。Maven 为项目提供了合理的默认行为。创建 Maven 项目时,Maven 会创建默认的项目结构。开发人员只需要相应地放置文件,而无需在 pom.xml 中定义任何配置。
例如,下表显示了项目源代码文件、资源文件和其他配置的默认值。假设 **${basedir}** 表示项目位置:
项目 | 默认值 |
---|---|
源代码 | ${basedir}/src/main/java |
资源 | ${basedir}/src/main/resources |
测试 | ${basedir}/src/test |
编译后的字节码 | ${basedir}/target |
可分发 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 页面的链接,您可以在其中获得错误的完整描述。