关于maven生命周期的理解

news/2024/5/17 15:45:00/文章来源:https://blog.csdn.net/qq_42584411/article/details/127093746

晚上有点无聊,看到了一些东西引发了自己的思路,就想将maven的一些东西总结总结,有从网上抄的,也有自己的思路。

一、生命周期是指什么(lifecycle)

Maven的生命周期就是对所有的构建过程进行抽象和统一。包含了项目的清理、初始化、编译、测试、打包、集成测试、验证、部署和站点生成等几乎所有的构建步骤。
在这里插入图片描述

二、阶段(phase)

阶段是生命周期的组成部分。特点:阶段在生命周期内具有顺序性,在执行生命周期中某个阶段时会先顺序执行本周期当前阶段之前的所有阶段,再执行当前阶段。
例如:clean周期共有3个阶段,按顺序分别如下:
pre-clean
clean
post-clean
生命周期及其包含阶段,阶段声明绑定的插件目标见下表
在这里插入图片描述
生命周期default(23个阶段
在这里插入图片描述
生命周期site(4个阶段)
在这里插入图片描述
由此我们可以知道当我们执行了一个生命周期其实并不是单纯的执行了一个东西,而是执行了很多阶段

三、插件(plugin)和目标(goal)

阶段的执行依赖插件和目标。(对于这句话看个人理解,不太好翻译,官方原话:A Build Phase is Made Up of Plugin Goals)插件从本质上来说插件j是打成jar包的java程序,目标应该是程序的参数。
插件可以单独执行 例如 :

mvn verify install:install

上面所说的生命周期的各个阶段都是抽象的概念(就是说自己抽象出来的阶段),真正干活的是一个个的插件,插件是以独立的构件形式存在,我们将maven的生命周期的各个阶段与maven的插件进行绑定,当我们执行mvn命令其实就是在指挥着一个个的插件在干活。

maven的插件以独立的构件形式存在,为了能够复用代码,使得一个插件可以完成多个任务,我们定义了插件目标(Plugin Goal),每一个目标都可以完成不同的功能。在IDEA下图中的位置上可以执行Goal
在这里插入图片描述
maven-dependency-plugin插件具有多个功能,比如分析项目依赖,还能列出项目的依赖树等。就是使用了analyze, tree和list等插件目标区分的。
dependency : analyze
dependency : tree
denpendency : list

当然为了能够让用户更加方便的构建项目,maven将大多数主要的生命周期阶段都绑定了很多插件的目标。如下所示:
在这里插入图片描述

上面图片中红框框住的就是插件名称,绿色框框住的就是插件的目标。那么一个插件又有哪些目标呢,大家可以打开上面给出的maven官方插件列表的网址
http://maven.apache.org/plugins/index.html
在maven给出的官方文档中可以看到其实我们在执行某个生命周期的时候并不是简单的执行了一步而是执行了很多步

现在我们来看下上面的pom文件,我们如配置了maven-compiler-plugin这个插件,其它的插件没有配置,但最后项目构建成功,说明maven内置的各种插件,如果pom中没有配置就调用默认的内置插件,如果pom中配置了就调用配置的插件。到此我们理解maven的构建过程或者有更多的人称是打包,就是由各种插件按照一定的顺序执行来完成项目的编译,单元测试、打包、布署的完成。各种插件的执行过程也就构成的maven的生命周期(lifecycle)。生命周期(lifecycle)各个阶段并非不能独立的,可以单独执行如mvn clean,也可以一起执行如mvn clean install。而且有的mvn命令其是包括多个阶段的,如mvn compile其是包括了resources和compile两个阶段。下面分别来分析各个阶段需要的插件和输出的结果。

四、着重介绍几个比较重要的常用的插件

clean阶段是独立的一个阶段,功能就是清除工程目前下的target目录,对应的插件是 maven-clean-plugin,可以使用maven内置的插件,当然也可以自己在pom中配置。

resource插件的功能就是把项目需要的配置文件拷贝到指定的目录,默认是拷贝src\main\resources目录下的文件到classes目录下,当然可以自己来配置源目录和输出目录。resources插件一般不单独执行,complie插件执行时会先调用resources插件。

compile插件执行时先调用resouces插件,功能就是把src\mainjava源码编译成字节码生成class文件,并把编译好的class文件输出到target\classes目录下。

单元测试所用的compile和resources插件和主代码是相同的,但执行的目标不同,目标testCompile和testResources是把src\test\java下的代码编译成字节码输出到target\test-classes,同时把src\test\resources下的配置文件拷贝到target\test-classes。

五、总结

本文阐述了maven中的两个重要概念生命周期和插件。正是生命周期阶段和插件的互相绑定,我们才能真正完成项目的构建。常用的插件如下:

maven-assembly-plugin :自定义打包方式,还是很有趣的,感兴趣的可以研究哦

maven-enforcer-plugin :展示项目依赖冲突

maven-antrun-plugin :运行ant脚本

maven-dependency-plugin :分析项目依赖

maven-clean-plugin :清理

maven-compiler-plugin :编译

maven-source-plugin :源码

maven-war-plugin :打包

maven-jar-plugin:打包

maven-surefire-plugin :测试

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

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

相关文章

Posix与System V IPC

Posix与System V IPC一、Posix IPC1.概述2.IPC名字3.px_ipc_name函数3.创建与打开IPC通道4.IPC权限二、System V IPC1.概述2.key_t键和ftok函数3.ipc_perm结构4.创建与打开IPC通道5.IPC权限6.标识符重用7.ipcs和ipcrm程序8.内核限制一、Posix IPC 1.概述 三种类型的IPC合称为…

Redux的基本使用过程详解

文章目录Redux的使用过程Redux测试项目的搭建Redux的基本使用步骤Redux目录的结构划分React的三大原则Redux的使用过程 Redux测试项目的搭建 1.创建一个新的项目文件夹:learn-redux # 执行初始化操作 npm init -y或yarn init -y # 安装redux:npm install redux --save或yarn …

自定义View 布局过程(Layout)

目录一、作用二、layout过程详解2.1单一View的layout过程具体使用具体流程源码分析总结2.2ViewGroup的layout过程具体使用具体流程源码分析总结三、细节问题:getWidth() ( getHeight())与 getMeasuredWidth() (getMeasuredHeight(…

Java高级——编译JDK

编译JDKJDK是什么?编译环境搭建JDK下载编译参数编译在IDE中调试源码JDK是什么? Java Development Kit,用于执行和开发java程序 编译环境搭建 本文采用Ubantu 18.04 执行以下命令安装依赖 apt-get install build-essential apt-get instal…

Transformer

参考 https://www.ylkz.life/deeplearning/p12158901/ https://zhuanlan.zhihu.com/p/396221959 模型结构 Input Embedding 将文本中词汇的数字表示转变为向量表示, 希望得到其在高维空间中的特征表示向量。 # 导入必备的工具包 import torch import torch.nn as nn import …

Qt5开发从入门到精通——第九篇一节( Qt5 文件及磁盘处理—— 读写文本文件)

CSDN话题挑战赛第2期 参赛话题:学习笔记 欢迎小伙伴的点评✨✨,相互学习c/c应用开发。🍳🍳🍳 博主🧑🧑 本着开源的精神交流Qt开发的经验、将持续更新续章,为社区贡献博主自身的开源精…

esp32-C3 CAN接口使用

esp32-C3 CAN接口使用功能概述CAN协议关注点接收过滤器单过滤器模式双过滤器模式关键函数说明配置和安装驱动获取TWAI状态信息发送/接收消息使用示例CAN控制器自回环测试CAN收发带过滤测试功能概述 ESP32-C3具有1个CAN控制器支持以下特性: 兼容ISO 11898-1协议(CA…

伟大的micropython smartconfig 配网它来了!!!

我这其实只是实验和搬运,还是感谢伟大的walkline群主,他弄好的,我只是负责搬运发布给新手看。 之前一大堆人问我配网的事儿,输入下wifi名称密码这么麻烦吗,好吧,有求必应,之前的配网是通过ap模式…

PICO高管专访:关于PICO 4硬件、内容、定价、海外布局的一切解答

PICO 4昨天正式在国内发布,简单来说这是一款相对均衡的VR一体机,在硬件素质、内容生态建设上都可圈可点,对于国内还未入手VR的朋友们来说是非常好的选择。相关阅读:《PICO 4评测:Pancake光学新标杆,VR娱乐V…

20【访问者设计模式】

文章目录二十、访问者设计模式20.1 访问者设计模式简介20.1.1 访问者设计模式概述20.1.2 访问者设计模式的UML类图20.2 访问者设计模式的实现20.3 访问者设计模式的优缺点二十、访问者设计模式 20.1 访问者设计模式简介 20.1.1 访问者设计模式概述 访问者设计模式&#xff0…

计算机网络基础 VLSM----可变长子网掩码;CIDR技术----无类域间路由;

VLSM----可变长子网掩码: 概述: 通过网络位向主机位借位的方式,延长子网掩码,从而达到将一个大网络划分为多个小网络;借出的位数称之为子网位,决定了能划分网络的个数。 优点: 更高效的利用…

记一次导入下载好的源码工程到本地工程异常解决方案

今天在学习okhttp相关视频时,安装视频的操作在自己的工程中引入三方的模块,但是发现引入后和预期的不一致。不一致指的是,视频中以module方式引入sample-okhttp并解决冲突后,sample-okhttp能够被android stuidio识别为applicayion…

Style样式设置器

构成Style最重要的两种元素: Setter类帮助我们设置控件的静态外观风格 Trigger类则帮助我们设置控件的行为风格。 Setter,设置器,我们给属性赋值的时候一般都采用“属 性名属性值”的形式 上面的例子中针对TextBlock的Style,Style中使用 若…

解决csdn强制关注博主才能阅读文章

问题 有的时候查阅资料的时候,关注博主并不是很方便,查csdn会出现下面的提示解决办法 打开控制台输入以下代码: var article_content=document.getElementById("article_content"); article_content.removeAttribute("style");var follow_text=document…

深入理解计算机系统——第七章 Linking

深入理解计算机系统——第七章 Linking7.1 Compiler Drivers7.2 Static Linking7.3 Object Files7.4 Relocatable Object Files7.5 Symbols and Symbol Tables7.6 Symbol Resolution7.6.1 How Linkers Resolve Duplicate Symbol Names7.6.2 Linking with Static Libraries7.6.3…

人体神经元结构示意图,神经细胞内部结构图

人体神经结构图???? 谷歌人工智能写作项目:神经网络伪原创 下图为神经系统的结构示意图,请根据图回答: (1)构成神经系统的结构、功能单位是神经元,图中E部分…

19【迭代器设计模式】

文章目录十九、迭代器设计模式19.1 迭代器设计模式简介19.1.1 迭代器设计模式概述19.1.2 迭代器设计模式的UML类图19.2 迭代器设计模式的实现19.3 迭代器设计模式的优缺点十九、迭代器设计模式 19.1 迭代器设计模式简介 19.1.1 迭代器设计模式概述 迭代器设计模式&#xff0…

DeFi借贷重新洗牌 透过协议变化能找到哪些新趋势?

在过去的几个月里,DeFi 借贷赛道产生了重大变化,1kx 研究员 Mikey 0x 对此场域重新进行梳理,BlockBeats 对其整理翻译如下: 本文内容将包括对新借贷协议的介绍、核心数据统计以及发展趋势,也许可以让我们大致把握下一…

Python3操作MongoDB数据库

Python3操作MongoDB数据库 文章目录Python3操作MongoDB数据库0. 写在前面1. 安装开源驱动库pymongo2. 参考0. 写在前面 Linux:Ubuntu Kylin 16.04MongoDB:MongoDB3.2.7Python:Anaconda With Python3.7 1. 安装开源驱动库pymongo pymongo驱动…

公众号题库搜题对接(免费接口)

公众号题库搜题对接(免费接口) 本平台优点: 多题库查题、独立后台、响应速度快、全网平台可查、功能最全! 1.想要给自己的公众号获得查题接口,只需要两步! 2.题库: 题库:题库后台(点击跳转&a…