Maven神秘化

由于我的Android开发的背景下,我比较习惯到摇篮 ,而不是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插件有两个主要目标。

准备

  1. 确认没有未提交的更改。
  2. 提示用户提供标签,发行版和开发版本名称。
  3. 在POM文件中修改并提交发布信息。
  4. 标记整个项目。

执行

  1. 以新标签名称提取文件修订
  2. 在提取的项目实例上执行Maven生命周期
  3. 将工件部署到本地和远程存储库

储存库

Maven使用存储库来保存构建工件和依赖项。

Maven 存储库与Git中一样使用,但是存储构建和依赖项目而不是源代码。 这样做,用户可以轻松地从存储库中消耗您的项目工件。

localremote存储库有两种类型,两者的存储结构相同。 本地存储库位于用户的本地计算机中,并用作远程存储库的缓存,提供了离线构建功能。 远程存储库可以分为两个子组,即publicinternal 。 公共存储库包含可公开使用的工件,而内部存储库是在组织中创建的,以在开发团队之间共享内部工件。

强烈建议使用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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/351712.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

走进JVM【二】理解JVM内存区域

引言 对于C程序员&#xff0c;内存分配与回收的处理一直是令人头疼的问题。Java由于自身的自动内存管理机制&#xff0c;使得管理内存变得非常轻松&#xff0c;不容易出现内存泄漏&#xff0c;溢出的问题。 不容易不代表不会出现问题&#xff0c;一旦内存泄漏或溢出的情况发生&…

mysql一对多_mysql一对多查询合并多的一方的数据。

有时候会有这样一个需求&#xff0c;查询的一条记录需要包含另一个表的多条记录&#xff0c;并且让多条记录成为一个字段组成最终的一条记录。比较难描述&#xff0c;看例子吧。创建一个产品表&#xff1a;create table product(proId int(10),proName varchar(50))创建一个成分…

Matlab矩阵、元胞数组的合并拼接

矩阵合并拼接 1.横向拼接 [a,b] [a b]均可 例1 >> amagic(3)a 8 1 63 5 74 9 2>> brand(3)b 0.6324 0.5469 0.15760.0975 0.9575 0.97060.2785 0.9649 0.9572>> c[a,b]c 8.0000 1.0000 6.0000 0.632…

Matlab拆分矩阵/Matlab如何分割大矩阵(mat2cell函数)

dim1Dist分割后矩阵行数组成的向量&#xff0c;dimNDist指的是分割后矩阵列数组成的向量 例有100*200的矩阵A >> Arand(100,200); >> bmat2cell(A,[30 40 30],[100 70 30])b 33 cell 数组{30100 double} {3070 double} {3030 double}{40100 double} {40…

分布式系统部署、监控与进程管理的几重境界

陈硕 (giantchen_AT_gmail) Blog.csdn.net/Solstice t.sina.com.cn/giantchen 陈硕关于分布式系统的系列文章&#xff1a;http://blog.csdn.net/Solstice/category/802325.aspx 本作品采用“Creative Commons 署名-非商业性使用-禁止演绎 3.0 Unported 许可协议(cc by-nc-nd)”…

.net core mvc初级教程(六)

一、创建movie的视图 二、对cinema、movie视图添加‘添加信息’的操作 一、创建movie的视图 在views文件夹下添加Movie文件夹&#xff0c;在这个文件夹下添加Index.cshtml视图&#xff0c;为什么添加Index.cshtml这个名字的视图&#xff0c;可以看看我们写的MovieController控制…

apache camel_发掘Apache Camel的力量

apache camel最近几年&#xff0c;ESB软件越来越受欢迎。 如果大多数人通常知道什么是ESB&#xff0c;那么他们很少会清楚地了解这种体系结构的不同组件的确切作用。 例如&#xff0c;Apache ServiceMix由三个主要组件组成&#xff1a;Apache Karaf&#xff08;OSGI容器&#…

角反射器的功能及应用

雷达反射器又名角反射器&#xff0c;它是通过金属板材根椐不同用途做成的不同规格的雷达波反射器。当雷达电磁波扫描到角反射后&#xff0c;电磁波会在金属角上产生折射放大&#xff0c;产生很强的回波信号&#xff0c;在雷达的屏幕上出现很强的回波目标。由于角反射器有极强的…

mysql卸载权限不够_Linu下启动MySQL结果显示:env: /etc/init.d/mysql:权限不够怎么解决?...

展开全部Linu下启动MySQL结果显示&#xff1a;env: /etc/init.d/mysql: 是脚本执行的问题解决办法&#xff1a;依次e69da5e887aa3231313335323631343130323136353331333365633936执行下面的命令(执行失败的话&#xff0c;检查路径是否正确)&#xff1a;cp /etc/init.d/mysql /e…

GDAL/ORG之Python获取与安装

GDAL(Geospatial Data Abstraction Library)是一个的开源栅格空间数据读取/转换库。其中还有一系列命令行工具来进行数据转换和处理。而ORG项目是GDAL的一个分支&#xff0c;功能与GDAL类似&#xff0c;但其提供对矢量数据的支持。 也就是说&#xff0c;可以用ORG的库来读取、处…

Firewall配置

一、安装firewall #yum install -y firewalld firewall-config 二、启动并设置开机自启动# systemctl start firewalld# systemctl enable firewalld# systemctl stop firewalld# systemctl disable firewalld 三、firewall配置# firewall-config 防火墙图形配置界面# firewall…

网页cookie是什么?

Cookie 是用户访问的网站创建的文件&#xff0c;存储在用户电脑的硬盘中&#xff0c;用于保存浏览信息&#xff0c;例如您的网站偏好设置或个人资料信息。网站依靠Cookie辨认用户行踪&#xff0c;了解用户感兴趣内容&#xff0c;收集与用户有关的信息。用户访问查询网页上操作信…

使用基于微服务的流架构更好地进行大规模的复杂事件处理(第1部分)

基于微服务的流架构与开源规则引擎相结合&#xff0c;使实时业务规则变得容易 这篇文章旨在详细说明我将OSS业务规则引擎与Kafka风格的现代流消息传递系统集成在一起的项目。 该项目的目标&#xff08;即众所周知的复杂事件处理&#xff08;CEP&#xff09;&#xff09;旨在实…

chown r mysql ._chown -R 用户名:组名 ./ 及 chown用法介绍

当我们在不通过yum(CentOS)、apt-get(Ubuntu)来安装MySQL的时候&#xff0c;通常执行以下命令来改变目录的拥有者&#xff1a;[rootlocalhost ~]# chown -R mysql:mysql ./这两个mysql谁是用户名谁是用户组呢&#xff1f;见chown详解。chown将指定文件的拥有者改为指定的用户或…

c语言abs和fabs的区别是什么?

abs是整数取绝对值&#xff0c;定义在stdlib.h头文件中。而fabs是指浮点数取绝对值&#xff0c;定义在math.h头文件中。 函数原型 int abs(int x) double fabs(double x)

Linux下编译GDAL

一、准备工作 从官网下载GDAL、PROJ.4和GEOS&#xff0c;将其存放在/home/liml/Work/3rdPart目录并解压&#xff0c;如下图所示。下载地址请自行Google。注&#xff1a;使用的系统是CentOS6.4 X64版本&#xff0c;其他的Linux系统都是一样的。 接下来检查系统中是否安装了开发…

PS提示错误1解决办法

重装电脑系统后&#xff0c;PS打不开了&#xff0c;提示错误1.在网上搜索&#xff0c;很多网友说要卸载重装。控制面板看不到ps&#xff0c;于是下载了Adobe卸载工具&#xff08;点击链接下载&#xff09;&#xff0c;但是这个程序识别不了安装的ps.最后通过以下办法解决。 1.…

如何为你的博客园添加到百度统计

1.打开百度统计的地址 https://tongji.baidu.com/web/welcome/login?castkLTE%3D 2.注册&#xff0c;打开网址后&#xff0c;右面有注册按钮&#xff0c;点击注册 选择站长版&#xff0c;点击去 填写自己的注册信息 3.填完之后&#xff0c;登录进去&#xff0c;在管理标签下有…

mysql 左连接 重复_mysql左连接重复行

我正在设计一个类似于4个表格的字典数据库wordswordid | lemmasenseswordid | synsetidsynsetssynsetid | definitionsamplessynsetid | sample所以我使用下面的查询来获取所有意义定义和样本if(isset($searchterm)){echo "".$searchterm."";// QUERY TO F…

osgi java_使普通的旧Java OSGi兼容

osgi java尽管OSGi在Java世界中越来越流行&#xff0c;但仍有许多Java应用程序和库尚未设计成可在OSGi中使用。 有时您可能需要在OSGi环境中运行这样的代码&#xff0c;或者是因为您想利用OSGi本身提供的好处&#xff0c;或者因为您只需要此特定环境提供的某些功能。 通常&…