maven 父maven
由于我的Android开发的背景下,我比较习惯到Gradle ,而不是Maven的 。 尽管我知道Gradle基于Maven,但我从未调查过幕后发生的事情。 在过去的一周中,我一直在尝试了解细节并找出Maven的不同组成部分。
什么是Maven
Maven是主要用于Java项目的构建和依赖关系管理系统。
主要功能包括:
- 通过原型创建新项目。
- POM文件和设置文件中的项目配置
- 使用生命周期 , 阶段 , 插件 , 目标和构建配置文件进行项目构建 。
- 通过存储库进行依赖管理
- 使用发布插件进行部署。
项目对象模型
项目对象模型或POM是Maven中的基本工作单元。 这是一个XML文件,通常在项目根目录中定义,其中包含有关项目的信息以及Maven用于构建项目的配置 。
可以包含在POM文件中的配置如下:
- 插件和目标
- 依存关系
- 储存库
- 构建配置文件
- 项目元数据,例如版本,描述,开发人员等。
为了简化所有项目的默认配置,Maven提供了所谓的Super POM 。 超级POM是Maven的默认POM。 所有POM都扩展了Super Pom,从而继承了Super POM中指定的配置。
设置文件
如上所述,POM文件包含项目配置,而Settings文件包含用户特定的配置。 可以有两个设置文件,位于Maven安装目录中的全局设置文件和位于用户主目录中的用户设置文件。
设置文件可以提供以下配置:
- 简单的价值观
- 插件组
- 服务器凭证
- 代理人
- 个人资料
建立生命周期
Maven构建过程基于生命周期 。 生命周期为构建和分发项目工件提供了明确定义的过程。
Maven中有三个不同的生命周期。
- 默认值:处理项目的构建和部署。
- 清洁:处理项目清洁。
- 网站:处理项目的网站文档。
相数
每个生命周期由一系列称为build phases的阶段定义。 构建阶段负责生命周期中的特定步骤,但是其执行职责的方式取决于绑定到该阶段的插件目标。
外挂程式
插件是为构建阶段提供目标的构件。 插件将阶段划分为目标,使构建过程真正灵活且可定制。
插件可以提供一个或多个目标。 每个目标都代表该插件的功能。
例如,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文件中,根据每个项目定义或在Settings文件中声明构建配置文件。 全局设置文件中定义的构建配置文件可用于机器的所有用户,而用户设置文件中定义的配置文件仅可用于特定用户。
配置文件以不同的方式触发:
- 明确地:通过命令行(包括-P选项)运行Maven构建。
- Maven设置:在
<active profiles>
部分中包含配置<active profiles>
。 使用此选项时,配置文件始终处于活动状态。 - 配置文件声明中的
<activation>
部分:激活部分可以根据环境变量,操作系统设置以及丢失或存在的文件来激活某个配置文件。
结论
Maven可以在许多方面减轻开发工作的负担:
- 轻松构建过程
- 统一构建系统
- 丰富的项目信息
- 最佳发展准则
- 透明迁移到新功能
我意识到直到最近我才知道有多少Maven功能,因此我邀请您自己检查它们。 你不会失望的。
翻译自: https://www.javacodegeeks.com/2016/08/maven-demystified.html
maven 父maven