关于maven生命周期的理解

article/2025/9/14 6:46:57

晚上有点无聊,看到了一些东西引发了自己的思路,就想将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://chatgpt.dhexx.cn/article/b0V36gHB.shtml

相关文章

Maven的生命周期

一、生命周期简介: Maven强大的一个重要的原因是它有一个十分完善的生命周期模型,这个生命周期可以从两方面来理解: 运行Maven的每个步骤都由它来定义的,这种预定义的默认行为使得我们使用Maven变得简单。 这个模型是一种标准&am…

Maven 生命周期

1. Maven 构建生命周期 Maven 构建生命周期就是 Maven 将一个整体任务划分为一个个的阶段,类似于流程图,按顺序依次执行。也可以指定该任务执行到中间的某个阶段结束。Maven 的内部有三个构建生命周期,分别是 clean, default, site。其中 def…

Maven生命周期

Maven生命周期 个人网站 https://blog.deschen.cn/ 文章目录 Maven生命周期一、Maven生命周期的定义二、Maven三套独立的生命周期三、Maven的插件 一、Maven生命周期的定义 Maven的生命周期就是为了对所有的构建过程进行抽象和统一。包括项目的清理,初始化&#x…

Maven —— 生命周期

每个生命周期的各个环节都是由各种插件完成!!!Maven有三个相互独立的生命周期(Maven的这三个生命周期不能看成一个整体)!!! mvn clean:清理编译的项目mvn compile&#x…

代码统计利器--CLOC

MAC下安装命令:$ brew install cloc其他的linux安装 $ aptitude install cloc使用方法.到目录下运行: $ cloc .The default output will show you a breakdown by language. Here’s an example of what it’ll look like: php much? You can, of course, customize the poop …

代码统计工具cloc使用

简介 CLOC(Count Lines of Code),是一个可以统计多种编程语言中空行、评论行和物理行的工具。这个工具还是蛮实用的,可以帮我们快速了解一个项目中代码的信息。 安装使用 windows 10 win10下可以去github上下载其最新版,截止本文时&#…

windows代码量计算开源工具cloc安装和使用教程

windows代码量计算开源工具cloc 下载cloc使用cloc 下载cloc cloc下载地址: https://github.com/AlDanial/cloc/releases. 选择exe版本的,也可以下载我上传的1.90版本链接: 点击跳转下载地址 使用cloc 下载好cloc-1.90.exe之后,重命名未cloc.exe&…

Linux统计代码量命令cloc

记录一下Linux中一个非常好用的代码量统计命令:cloc 安装步骤: sudo apt-get install cloc使用方法: 进入到要统计的工程根目录: cloc .运行结果:

Windows环境下用cloc统计代码量

cloc一款开源代码统计工具,支持windows和Linux环境。能统计指定文件夹或文件夹中文件数files、空白行数blank、注释行数comment和代码行数code。今天介绍windows环境下的使用方法。 使用简单: 下载: Releases AlDanial/cloc (github.com)…

代码统计工具CLOC的使用

简介 CLOC(Count Lines of Code),是一个可以统计多种编程语言中空行、评论行和物理行的工具。这个工具还是蛮实用的,可以帮我们快速了解一个项目中代码的信息。 安装使用 windows 10 win10下可以去github上下载其最新版,截止本文时&#…

cloc 代码统计工具

安装 yum -y install cloc使用 [rootnode1 new-website]# cloc .135 text files.134 unique files.20 files ignored.github.com/AlDanial/cloc v 1.70 T3.63 s (32.0 files/s, 26416.0 lines/s) ------------------------------------------------------------------------…

10分钟掌握高效代码行统计工具——cloc

cloc 一款高效的代码行统计工具,且跨多平台: WindowLinuxMac… … 高效是其优点,且稳定性比较好。 Linux版的可以处理超大工程的文件,不会出现其它同类工具在处理超大文件时崩溃的问题。 用法简单,学习成本低&…

前端代码统计工具cloc的安装与使用

怎么来衡量一个web端项目的大小,一是看页面多少,二是看源代码行数。页面多少比较好统计,通过 Router 的配置大概就能知道。但是源代码行数,如果要一个文件一个文件去计算,那就费了劲了。有问题有需求,就会有…

“无法启动mysql服务,错误1053”解决办法

启动MySQL服务时,报错如下: 1.“CTRLR”打开运行窗口,输入regedit点击确定打开注册表编辑器 2.找到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MySQL目录 3.修改ImagePath路径为mysqlld.exe路径,重启服务即可

解决Windows服务1053错误方法

WCF使用MSMQ绑定寄宿在Windows服务上,但启动服务时出现1053错误 在网上搜索了N多解决方案,都是比较高深的扯到原理和系统bug等问题 看了看到最后也没有解决,最终我决定使用一个比较山寨的但很有用的方式查看问题所在,所以就在代码…

windows无法启动MySQL服务出现1053错误原因之一

今天去使用mysql的时候出现了这样一个问题 我以为是mysql服务没开,去开启服务的时候出现 错误原因 服务的路径与安装的路径不一致,之前安装过mysql后卸载重装容易出现这样的问题,要么就是你可能从计算机上面卸载什么,组件程序&a…

无法启动OracleDBConsoleorcl服务,错误:1053 的解决办法 .

在控制面板里启动oracle的服务,其中启动OracleDBConsoleorcl服务时出错,提示:在本地计算机无法启动OracleDBConsoleorcl服务。错误:1053:服务没有及时相应启动或控制请求。重启电脑之后依然如故。请问怎么解决呢&#…

系统错误1058的解决办法

今天打算写个关闭windows系统服务的程序,发现了个错误 错误描述:无法启动Themes服务 错误详细步骤: 1.我以前禁用了服务themes 2.现在手动修改注册表HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/Themes中的"Start"为3…

Win11安装mysql 服务无法启动 1053错误之解决方法

手动启动的时候报错1053. 网上查询解决方法 MySQL启动1053错误之解决方法_小智解说的博客-CSDN博客_mysql1053 方法一: 重装mysql,重装后发现还是启动失败 方法二 为提高网络服务权限,需将网络服务添加到管理员组 计算机->管理->本地…

计算机Auto服务错误1053,服务启动1053错误解决步骤

我们在使用电脑是由于各种原因,需要对一些服务进行启动,可是有些用户却遇到了一些问题,比如有用户在启动某服务的时候,却发现启动不了,提示服务启动1053错误,那么遇到这样的问题该如何处理呢?下…