Maven揭秘 ,什么是Maven,以及为什么要用和如何用maven,这是开始使用Maven所需了解的全部内容。非常适合新手或习惯于Gradle的开发人员。
Maven揭秘
Maven 是一个构建和依赖管理系统,主要用于 Java 项目。
主要特点包括:
- 通过原型创建新项目 。
- POM 和 设置文件中的项目配置 。
- 使用 生命周期、 阶段、 插件、 目标和 构建配置文件构建项目。
- 通过存储库进行依赖管理 。
- 使用发布插件部署 。
项目对象模型
项目对象模型或 POM 是 Maven 中的基本工作单元。它是一个 XML 文件,通常在项目根目录中定义,其中包含有关项目的信息以及Maven 用于构建项目的配置。
POM文件中可以包含的配置如下:
- 插件和目标
- 依赖关系
- 资料库
- 建立档案
- 项目元数据,例如版本、描述、开发人员等。
为了方便所有项目的默认配置,Maven 提供了所谓的Super POM。Super POM 是 Maven 的默认 POM。所有 POM 都扩展了 Super Pom,从而继承了 Super POM 中指定的配置。
设置文件
如上所述,POM 文件包含项目配置,而设置文件包含用户特定的配置。可以有两个设置文件,位于 Maven 安装目录中的全局设置文件和位于用户主目录中的用户设置文件。
设置文件可以提供以下配置:
- 简单值
- 插件组
- 服务器凭据
- 代理
- 简介
构建生命周期
Maven 构建过程基于生命周期。生命周期为构建和分发项目工件提供了明确定义的过程。
Maven 中存在三种不同的生命周期。
- 默认值:处理项目构建和部署。
- 清洁:处理项目清洁。
- 站点:处理项目的站点文档。
阶段
每个生命周期都由一系列名为构建阶段的阶段定义。构建阶段负责生命周期中的特定步骤,但它履行职责的方式取决于绑定到该阶段的插件目标。
插件
插件是为构建阶段提供目标的工件。将阶段划分为目标,由插件提供,使构建过程真正灵活和可定制。
一个插件可以提供一个或多个目标。每个目标代表该插件的一个功能。
例如,Maven 只支持项目的单个源和测试目录。如果我们决定向项目添加额外的目录,我们可以使用一个提供目标的插件来将源目录和测试目录添加到构建过程中。
目标
目标负责在每个阶段执行特定任务。
一些阶段有默认目标。对于默认生命周期,默认目标由打包选项提供,在项目的 POM 文件中定义。
除了默认目标外,还可以通过在项目的 POM 文件中配置插件来定义额外的目标。因此,一个特定的构建阶段可以由多个目标组成。如果一个阶段没有任何目标,它就不会作为生命周期的一部分执行。
独立插件
大多数插件提供绑定到构建阶段的目标。然而,有些插件提供的目标是单独执行的,而不是作为构建生命周期的一部分。
原型插件
如果您碰巧是 IntelliJ 用户,您可能已经看到,在创建新的 Maven 项目时,第一个选项是原型列表。你有没有想过它是做什么用的?我不得不说,直到我通过深入研究 Maven 功能发现了原型是什么,我才知道。
原型只是一个现有的项目模板。Archetype 插件提供 Maven项目模板。它基于标准模板创建项目结构和 POM 文件。创建新项目的过程以交互方式完成,只需提供项目特定的配置,如 groupid、工件名称等。
它有助于应用项目或组织的最佳实践。新用户可以在几秒钟内拥有一个工作项目作为行走骨架。
该插件具有附加支持,这意味着可用于向现有项目添加片段,即 Maven 站点原型可以快速为项目创建文档站点。
用户可以在其组织的存储库中创建自己的原型,并将其用作新项目的基础。
作为一个独立的插件,原型插件提供了不受任何生命周期约束的目标。目标是直接执行的,这与使用生命周期时所做的相反,在生命周期中目标是作为生命周期阶段的一部分执行的。
发布插件
提供发布项目工件的标准机制。
Release 插件有两个主要目标。
准备
- 验证没有未提交的更改。
- 提示用户提供标签、发布和开发版本名称。
- 修改并提交 POM 文件中的发布信息。
- 标记整个项目。
履行
- 在新标签名下提取文件修订
- 在提取的项目实例上执行 Maven 生命周期
- 将工件部署到本地和远程存储库
资料库
Maven 使用存储库来保存构建工件和依赖项。
Maven存储库像在 Git 中一样使用,但存储构建和依赖项工件而不是源代码。这样做,用户可以轻松地使用存储库中的项目工件。
有两种类型的存储库local
和remote
,两者的结构相同。本地存储库位于用户本地机器中,用作远程存储库的缓存,提供离线构建能力。远程存储库可以分为两个子组,public
和internal
. 公共存储库包含公开可用的工件,而内部存储库是在组织中创建的,用于在开发团队之间共享内部工件。
强烈建议在使用 maven 时,依赖 JAR 不存储在源代码管理中,而是存储在存储库中。这样一来,Maven 就能够处理传递性依赖项,因为所有依赖项信息都可以通过 POM 文件和 Maven 存储库获得。
建立档案
Maven构建配置文件用于促进可移植构建。构建配置文件在构建时修改 POM 文件以提供依赖于环境的等效但不同的参数。例如,它是定义每个用户不同的文件系统引用的完美场所。
配置文件提供可在 POM 文件中引用的属性。这些属性<properties>
在配置文件声明的部分中定义。
可以根据项目定义在 POM 文件中或在设置文件中声明构建配置文件。全局设置文件中定义的构建配置文件可供机器的所有用户使用,而用户设置文件中定义的构建配置文件仅适用于特定用户。
配置文件以不同的方式触发:
- 显式地:通过命令行运行 Maven 构建,包括 -P 选项。
- Maven 设置:包括
<active profiles>
部分中的配置文件。使用此选项时,配置文件始终处于活动状态。 <activation>
配置文件声明中的部分:激活部分可以根据环境变量、操作系统设置以及丢失或存在的文件激活某个配置文件。
结论
Maven 可以在许多领域简化开发工作:
- 简单的构建过程
- 统一构建系统
- 丰富的项目信息
- 最佳发展指南
- 透明迁移到新功能