Maven 简明教程
Maven - Overview
What is Maven?
Maven 是一种项目管理和理解工具,为开发人员提供了完整的构建生命周期框架。开发团队几乎可以在很短的时间内自动执行项目的构建基础设施,因为 Maven 使用了标准目录布局和默认构建生命周期。
在涉及多个开发团队的环境中,Maven 可以迅速建立按照标准工作的方式。由于大部分项目设置简单可重复利用,Maven 在创建报告、检查、构建和测试自动化设置时,简化了开发人员的工作。
Maven 为开发人员提供了管理以下内容的方式:
-
Builds
-
Documentation
-
Reporting
-
Dependencies
-
SCMs
-
Releases
-
Distribution
-
Mailing list
总结来说,Maven 简化并标准化了项目构建过程。它无缝处理编译、分发、文档编制、团队协作及其他任务。Maven 提高了可重复利用性,并负责大部分与构建相关的任务。
Maven Evolution
Maven 最初设计目的是简化 Jakarta Turbine 项目中的构建流程。它包含多个项目,每个项目都包含稍有不同的 ANT 构建文件。JAR 已签入 CVS。
Apache 小组随后开发了 Maven ,它可以同时构建多个项目,发布项目信息,部署项目,在多个项目中共享 JAR,并协助团队协作。
Objective
Maven 的主要目标是为开发人员提供以下内容:
-
一个全面、可重复利用、可维护且易于理解的项目模型。
-
与此声明模型相交互的插件或工具。
Maven 项目结构和内容在 XML 文件 pom.xml 中声明,该文件称为项目对象模型 (POM),它是整个 Maven 系统的基本单元。在后续章节中,我们将详细解释 POM。
Convention over Configuration
Maven 在 Convention 上使用 Configuration ,这意味着开发人员无需自己创建构建流程。
开发人员不必提及每个配置详情。Maven 为项目提供了可行的默认行为。当创建 Maven 项目时,Maven 将创建默认项目结构。开发人员只需要相应放置文件,而无需在 pom.xml 中定义任何配置。
例如,下一表格显示了项目源代码文件、资源文件和其他配置的默认值。假设 ${basedir} 表示项目位置 -
Item |
Default |
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 插件。
Features of Maven
-
遵循最佳实践的简单项目设置。
-
在所有项目中一致使用。
-
依赖项管理,包括自动更新。
-
大型且愈发丰富的库存储库。
-
可扩展,能够在 Java 或脚本语言中轻松编写插件。
-
几乎不需额外配置即可即时访问新功能。
-
Model-based builds − Maven 能够将任意数量的项目构建成 jar、war、metadata 等预定义的输出类型。
-
Coherent site of project information − Maven 能够根据构建过程中的元数据生成网站和 PDF,包括完整的文档。
-
Release management and distribution publication − 无需额外配置,Maven 便会整合 CVS 等源代码管理系统,并管理项目的发布。
-
Backward Compatibility − 您能轻松地将某个项目的多个模块从旧版 Maven 移植到 Maven 3。它也可支持旧版本。
-
Automatic parent versioning − 无需在维护的子模块中指定父级。
-
Parallel builds − 它分析项目依赖图并使您能够并行构建调度模块。利用此功能,您可提高 20-50% 的性能。
-
Better Error and Integrity Reporting − Maven 改进了错误报告,并为您提供指向 Maven Wiki 页面的链接,以便您获取错误的完整描述。