Maven生命周期

news2024/11/23 12:37:07

Maven生命周期
通过IDEA工具的辅助,能很轻易看见Maven的九种生命周期命令,如下:

双击其中任何一个,都会执行相应的Maven构建动作,为啥IDEA能实现这个功能呢?道理很简单,因为IDEA封装了Maven提供的命令,如:点击图中的clean,本质是在当前目录中,执行了mvn clean命令,下面解释一下每个命令的作用:

clean:清除当前工程编译后生成的文件(即删除target整个目录);
当我们执行构建操作(如编译、测试、打包等)时,会生成一些中间结果和最终产物,这些文件通常存放在项目根目录下的target目录中。通过运行mvn clean命令,Maven会首先执行clean生命周期中的clean阶段,清理整个target目录下的内容,不会动依赖的jar包。这样做可以确保在进行下一次构建时,之前的编译结果和生成的文件都被彻底清除,从而保证了一个干净的构建环境。

validate:对工程进行基础验证,如工程结构、pom、资源文件等是否正确;
在执行Maven构建时,当进入到validate阶段时,Maven会检查项目的一些基本信息和配置是否存在问题或错误。例如,它会验证项目的目录结构是否符合规范,是否包含所需的源代码和资源文件,以及项目的POM文件是否正确配置了必要的依赖、插件和属性等。通过执行mvn validate命令或作为构建过程中较早的一个阶段,可以触发validate阶段的执行。如果在该阶段检测到任何问题或错误,Maven将报告相应的错误消息,并停止后续构建过程。验证阶段的目的是确保项目的基础设置和配置是正确的,以便能够顺利执行后续的编译、测试、打包等构建任务。它有助于提前发现并解决项目配置方面的问题,以避免在后续构建过程中出现潜在的错误或异常。

 compile:对src/main/java目录下的源码进行编译(会生成target目录);
compile是默认生命周期中的一个阶段,用于对项目中的源代码进行编译。该阶段主要负责编译位于src/main/java目录下的Java源码文件。当执行Maven构建时,当进入到compile阶段时,Maven会使用Java编译器(例如Javac)将src/main/java目录下的源代码文件编译为字节码文件(.class文件)。编译后的结果会被输出到项目的target目录下。通过执行mvn compile命令或作为构建过程中的一个阶段,可以触发compile阶段的执行。如果在该阶段编译过程中发现了源代码的语法错误或其他问题,Maven将报告相应的错误消息,并停止构建过程。

test:编译并执行src/test/java/目录下的所有测试用例;

执行 src/test/java/ 目录下的所有测试用例通常意味着执行其中使用了 @Test 注解标记的方法,以验证代码的正确性和稳定性。

package:将当前项目打包,普通项目打jar包,webapp项目打war包;
将项目打包是指将项目的源代码、配置文件和依赖库等资源整合为一个可执行的文件或归档文件。打包完成的文件通常会被放置在项目的 target 目录下。这样可以方便地部署、分发和运行项目。在 Maven 中,使用 Maven 插件可以轻松地将当前项目打包成不同的形式,根据项目类型和需求,有两种常见的打包方式:

对于普通项目:可以将其打包为 JAR(Java Archive)文件。JAR 文件是一种归档格式,用于存储 Java 类、资源文件和依赖库等。它可以作为一个独立的可执行文件,并可以在 Java 虚拟机上运行。使用 Maven 打包成 JAR文件时,可以包含项目的编译结果以及相关的配置文件,使其方便地被其他项目引用和调用。
对于 Web 应用程序(Web Application)项目:可以将其打包为 WAR(Web Application Archive)文件。WAR 文件是一种归档格式,用于打包和部署 Web 应用程序。它可以包含项目的编译结果、Web 资源、Servlet、JSP 页面、静态文件等,并可以在支持 Java Servlet 规范的 Web 容器中运行。使用 Maven 打包成 WAR 文件时,通常会将项目打包为一个独立可部署的文件,以便于在 Web 服务器上进行部署和发布。

verify:验证工程所有代码、配置进行是否正确,如类中代码的语法检测等;
经过了编译打包,可能会出错,所以再检查一遍。
verify 是软件开发中的一个步骤,用于验证工程中的代码和配置是否正确。它通常包括对代码进行语法检测、静态分析和其他类型的自动化检查,以确保代码的质量和一致性。 在软件开发过程中,为了减少错误和提高代码的可维护性,开发人员可以使用各种工具和技术来进行代码验证。
以下是一些常见的代码验证方法:
语法检查:通过使用编译器或静态代码分析工具,可以检查代码是否符合编程语言的语法规范。这些工具可以捕获语法错误、拼写错误和常见的语义错误。
静态代码分析:静态代码分析工具可以对代码进行详细的检查,以查找潜在的问题和缺陷。例如,它可以检测未使用的变量、空指针引用、不良的编程实践等。
代码风格检查:代码风格指定了代码的书写规范,如缩进、命名约定、注释规范等。通过使用代码风格检查工具,可以确保项目中的所有代码都遵循统一的代码风格。
单元测试:单元测试是用于验证单个函数、类或模块的行为是否正确的测试方法。通过编写和执行单元测试,可以检验代码是否按预期工作,并捕获潜在的缺陷。
集成测试:集成测试是用于验证组件之间的交互和整体系统的功能的测试方法。它可以确保各个模块在集成时能够正常工作,并发现可能存在的集成问题。
通过进行代码验证,开发人员可以及早发现并解决问题,提高代码质量,减少后续调试和修复的工作量。

install:将当前工程打包,然后安装到本地仓库,别人可通过GAV导入;
install是指将当前项目打包,并将该打包文件安装到本地仓库中,以便其他人可以通过引入该项目的GAV(Group/Artifact/Version)信息也就是依赖dependency来使用该项目。
具体步骤如下:
打包:首先,使用构建工具(如Maven或Gradle)执行打包命令,将项目的源代码编译为可执行文件或可部署的包。打包过程会根据项目的配置文件生成相应的构建产物。
安装:然后,使用构建工具执行"install"命令,将项目的打包文件安装到本地仓库。本地仓库通常位于开发人员的计算机上,用于存储和管理本地构建和依赖项。
导入:其他开发人员可以通过在其项目的配置文件中添加对该项目的 GAV 信息来导入该项目。GAV包括"Group"(组织)、“Artifact”(项目名称)和"Version"(版本号)等标识符,用于唯一标识一个特定的项目。
通过执行"install"命令并将项目安装到本地仓库,可以使其他开发人员能够方便地引入并使用该项目作为依赖项。这样做的好处是,避免了每个项目都需要重新构建和打包依赖项的麻烦,提高了开发效率和代码复用性。
一般在为服务项目中我们一般会设置一个commons基础模块,用来做一些公共的东西和通用的依赖,然后让其他模块引用这个模块的依赖。

site:生成项目的概述、源码测试覆盖率、开发者列表等站点文档(需要额外配置);
site是指生成项目的站点文档,其中包括项目概述、源码测试覆盖率报告、开发者列表等信息。 生成站点文档需要进行额外的配置和操作。
通常情况下,使用构建工具(如Maven或Gradle)执行"site"命令可以生成项目的站点文档。以下是一些常见的站点文档内容:
项目概述:包括项目的描述、目标、功能特性等信息,用于向用户和其他开发人员介绍项目的基本情况和背景。

源码测试覆盖率报告:通过运行单元测试并对代码进行分析,生成源码测试覆盖率报告。该报告显示了测试用例对项目代码的覆盖程度,帮助开发人员评估测试的完整性和质量。

开发者列表:列出了参与项目开发的开发人员列表,包括他们的姓名、联系方式等信息。这样可以让其他人知道哪些开发人员参与了项目,方便合作和交流。

通过生成站点文档,开发人员可以将项目的相关信息以易读且友好的方式展现出来,方便项目的理解、文档查阅和协作。此外,站点文档也可以作为项目的官方文档发布和分享。需要注意的是,生成站点文档通常需要根据项目的需要进行额外的配置和设置。具体的配置方法可以参考构建工具的文档或相关教程。

deploy:将当前工程对应的包,上传到远程仓库,提供给他人使用(私服会用)。
deploy是指将当前工程对应的包或构建产物上传到远程仓库,以便他人可以从该仓库获取并使用这些包。
通常情况下,开发人员使用构建工具(如Maven或Gradle)执行"deploy"命令,将构建好的项目包或库发布到远程仓库。远程仓库可以是公共的仓库,如Maven中央仓库,也可以是私有的仓库,如企业内部搭建的私服。
以下是"deploy"的一些关键概念和流程:
包或构建产物:在软件开发中,项目经过构建打包之后会生成相应的包或构建产物,用来提供给其他开发人员使用。这些包可以是可执行文件、库文件、插件等,根据项目类型和需求而定。
远程仓库:远程仓库是存储和管理包和构建产物的地方,以供他人进行访问和下载。公共远程仓库(如Maven中央仓库)通常包含了大量的开源包供社区使用,而私有远程仓库(如企业内部私服)则用于存储特定组织或项目的包。
配置认证信息:为了能够向远程仓库发布内容,需要在构建工具的配置文件中提供相应的认证信息,如用户名和密码。这些信息用于验证发布者的身份,并确保只有授权用户才能上传内容。
通过执行"deploy"命令并提供认证信息,开发人员可以将当前工程对应的包或构建产物上传到远程仓库,使他人可以方便地获取和使用这些软件资源。这样做的好处是,避免了每个开发人员都需要重新构建和打包项目的麻烦,提高了代码的复用性和共享性。
需要注意的是,执行"deploy"命令需要确保远程仓库的地址和认证信息正确配置,并且具备相应的权限和访问权限。

Maven划分的三套生命周期:

 

主要看default这套,该生命周期涵盖了构建过程中的检测、编译、测试、打包、验证、安装、部署每个阶段。注意一点:同一生命周期内,执行后面的命令,前面的所有命令会自动执行!
比如现在执行一条命令:

mvn test

 est命令位于default这个生命周期内,所以它会先执行validate、compile这两个阶段,然后才会真正执行test阶段。同时,还可以一起执行多个命令,如:

mvn clean install

这两个命令隶属于不同的周期,所以会这样执行:先执行clean周期里的pre-clean、clean,再执行default周期中,validate~install这个闭区间内的所有阶段。

从上面不难发现,default是Maven的核心周期,但其实上面并没有给完整,因为官方定义的default一共包含23个小阶段,上面的图只列出了七个核心周期,对详细阶段感兴趣的可以自行了解。

Maven中只定义了三套生命周期,以及每套周期会包含哪些阶段,而每个阶段具体执行的操作,这会交给插件去干,也就是说:Maven插件会实现生命周期中的每个阶段,这也是大家为什么看到IDEA的Lifecycle下面,还会有个Plugins的原因:

当你双击Lifecycle中的某个生命周期阶段,实际会调用Plugins中对应的插件。在Shell窗口执行mvn命令时,亦是如此,因为插件对应的实现包,都会以jar包形式存储在本地仓库里。

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

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

相关文章

C语言第三十五弹---打印九九乘法表

C语言打印九九乘法表 思路&#xff1a;观察每一行可以看出乘号右边的一行值都是相同的&#xff0c;而乘号左边不断变化&#xff0c;所以使用嵌套循环&#xff0c;控制好 乘号左右值变化的条件即可。 #include <stdio.h>int main() {for (int i 1; i < 9; i){for (in…

浏览器如何读取本地Excel表格

浏览器可以读取Excel表格数据吗&#xff1f; 答案是否定的&#xff0c;目前主流浏览器都无法打开本地Excel文档。 答案也是肯定的&#xff0c;这就来看看具体实现方法&#xff01;&#xff01;&#xff01; 首先准备一个Excel表格文件 保存在D:\\temp\测试表.xls…

每天五分钟计算机视觉:LeNet是最早用于数字识别的卷积神经网络

LeNet 假设你有一张 32321 的图片,然后使用 6 个 55的过滤器,步幅为 1,padding 为 0,输出结果为 28286。图像尺寸从 3232 缩小到 2828。 然后进行池化操作,使用平均池化,过滤器的宽度为 2,步幅为 2,图像的尺寸,高度和宽度都缩小了 2 倍,输出结果是一个14146 的图像。…

邮件违规拦截利用了什么技术丨如何拦截违规邮件

当今世界信息化速度加快&#xff0c;但随之而来的各种网络风险也增加。其中&#xff0c;对于邮件违规信息的拦截愈加引得人们关注。 我们先来看下邮件违规拦截的好处&#xff1a; 1、提高邮件发送效率&#xff1a;如果邮件发送到错误的收件人或被错误地拦截&#xff0c;会导致…

python计算概率分布

目录 1、泊松分布 2、卡方分布 3、正态分布 4、t分布 5、F分布 1、泊松分布 泊松分布是一种离散概率分布&#xff0c;描述了在固定时间或空间范围内&#xff0c;某个事件发生的次数的概率分布。该分布以法国数学家西蒙德尼泊松的名字命名&#xff0c;他在19世纪早期对这种…

北京劲松HPV诊疗中心专家解读:感染HPV18危害大吗?

小李&#xff0c;一个普通的中国女性&#xff0c;今年32岁&#xff0c;平日里忙碌于工作与家庭之间&#xff0c;生活充实而有序。然而&#xff0c;一年前的一次健康检查&#xff0c;却让她的生活陷入了一场无声的风暴。 去年&#xff0c;小李在公司的年度体检中&#xff0c;意…

AI - Crowd Simulation(集群模拟)

类似鱼群&#xff0c;鸟群这种群体运动模拟。 是Microscopic Models 微观模型&#xff0c;定义每一个个体的行为&#xff0c;然后合在一起。 主要是根据一定范围内族群其他对象的运动状态决定自己的运动状态 Cohesion 保证个体不会脱离群体 求物体一定半径范围内的其他临近物…

API协作管理工具:Apipost

在当今快速发展的数字化时代&#xff0c;API已成为企业与开发者实现数据互通、应用集成的重要桥梁。然而&#xff0c;随着API数量的不断增加&#xff0c;API开发、调试、测试、文档等工作也变得越来越复杂。为了解决这一痛点&#xff0c;一款名为Apipost的API协同研发工具应运而…

C_6微机原理

一、单项选择题&#xff08;本大题共 15小题&#xff0c;每小题3分&#xff0c;共45分。在每小题给出的四个备选项中&#xff0c;选出一个正确的答案&#xff0c;请将选定的答案填涂在答题纸的相应位置上。 n1 位有符号数 的补码表示范围为&#xff08;&#xff09; A. -2n&l…

【libGDX】加载G3DJ模型

1 前言 libGDX 提供了自己的 3D 格式模型文件&#xff0c;称为 G3D&#xff0c;包含 g3dj&#xff08;Json 格式&#xff09;和 g3db&#xff08;Binary 格式&#xff09;文件&#xff0c;官方介绍见 → importing-blender-models-in-libgdx。 对于 fbx 文件&#xff0c;libGDX…

pinia从入门到使用

pinia: 比vuex更适合vue3的状态管理工具&#xff0c;只保留了vuex 原有的 state, getters&#xff0c;actions 作用等同于 data computed methods&#xff0c;可以有多个 state 1.安装创建导入 安装&#xff1a;npm install pinia 或 yarn add pinia 创建stores/index.js inde…

0基础学习VR全景平台篇第123篇:VR视频航拍补天 - PR软件教程

上课&#xff01;全体起立~ 大家好&#xff0c;欢迎观看蛙色官方系列全景摄影课程&#xff01; 嗨&#xff0c;大家好&#xff0c;今天我们来介绍【航拍VR视频补天】。之前已经教给了大家如何处理航拍图片的补天&#xff0c;肯定有很多小伙伴也在好奇&#xff0c;航拍的VR视频…

2023年亚太杯APMCM数学建模大赛B题玻璃温室小气候调控

2023年亚太杯APMCM数学建模大赛 B题 玻璃温室小气候调控 原题再现 温室作物的产量受各种气候因素的影响&#xff0c;包括温度、湿度和风速[1]。其中&#xff0c;适宜的温度和风速对植物生长至关重要[2]。为了调节玻璃温室内的温度、风速等气候因素&#xff0c;在温室设计中常…

C语言:求二维数组鞍点 。鞍点就是指二维数组中在该位置上的元素在该行上最大,在该列上最小,也可能没有鞍点。

分析&#xff1a; 在主函数 main 中&#xff0c;程序首先定义一个二维数组 a[5][5] 和五个整型变量 i、j、max、maxj 和 k&#xff0c;并用于寻找鞍点。然后使用 printf 函数输出提示信息。 接下来&#xff0c;程序使用两个 for 循环结构&#xff0c;从键盘输入一个 5x5 的二…

Linux 栈回溯

目录 前言一、什么是栈回溯&#xff1f;二、栈回溯的实现原理三、参考阅读 前言 日常工作中&#xff0c;我们在开发软件程序时&#xff0c;经常会遇到程序奔溃的问题&#xff0c;导致程序奔溃的原因有很多&#xff0c;我们一般都是定位到相关代码&#xff0c;再去查询具体原因。…

vue3中shallowReactive与shallowRef

shallowReactive与shallowRef shallowReactive: 只处理了对象内最外层属性的响应式(也就是浅响应式) shallowRef: 只处理了value的响应式, 不进行对象的reactive处理 总结: reactive与ref实现的是深度响应式, 而shallowReactive与shallowRef是浅响应式。 什么时候用浅响应…

JVM——垃圾回收器(Serial,SerialOld,ParNew,CMS,Parallel Scavenge,Parallel Old)

目录 1.垃圾回收器的组合关系1.年轻代-Serial垃圾回收器2.老年代-SerialOld垃圾回收器3.年轻代-ParNew垃圾回收器4.老年代- CMS(Concurrent Mark Sweep)垃圾回收器CMS执行步骤&#xff1a;CMS垃圾回收器存在的问题缺点&#xff1a;CMS垃圾回收器存在的问题 – 线程资源争抢问题…

【计算机网络笔记】ARP协议

系列文章目录 什么是计算机网络&#xff1f; 什么是网络协议&#xff1f; 计算机网络的结构 数据交换之电路交换 数据交换之报文交换和分组交换 分组交换 vs 电路交换 计算机网络性能&#xff08;1&#xff09;——速率、带宽、延迟 计算机网络性能&#xff08;2&#xff09;…

论文解读:《数据增强:通过强化学习引导的条件生成进行文本数据扩充》

Title:<Data Boost: Text Data Augmentation Through Reinforcement Learning Guided Conditional Generation> 期刊&#xff1a;EMNLP &#xff08;顶级国际会议&#xff09; 作者 Ruibo Liu; Guangxuan Xu; Chenyan Jia; Weicheng Ma; Lili Wang; et al 出版日期 20…

利用STM32和蓝牙模块构建智能物联网设备的开发指南

智能物联网设备在现代生活中扮演着重要的角色&#xff0c;而STM32微控制器和蓝牙模块则为实现智能物联网设备提供了基础支持。本文将介绍如何使用STM32微控制器和蓝牙模块构建智能物联网设备的开发指南&#xff0c;包括硬件设计、蓝牙模块配置、传感器数据采集和云平台连接等关…