当前位置: 首页 > news >正文

Maven生命周期

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包形式存储在本地仓库里。

相关文章:

Maven生命周期

Maven生命周期 通过IDEA工具的辅助,能很轻易看见Maven的九种生命周期命令,如下: 双击其中任何一个,都会执行相应的Maven构建动作,为啥IDEA能实现这个功能呢?道理很简单,因为IDEA封装了Maven提供…...

深度学习(五):pytorch迁移学习之resnet50

1.迁移学习 迁移学习是一种机器学习方法,它通过将已经在一个任务上学习到的知识应用到另一个相关任务上,来改善模型的性能。迁移学习可以解决数据不足或标注困难的问题,同时可以加快模型的训练速度。 迁移学习的核心思想是将源领域的知识迁…...

面试官:说说synchronized与ReentrantLock的区别

程序员的公众号:源1024,获取更多资料,无加密无套路! 最近整理了一波电子书籍资料,包含《Effective Java中文版 第2版》《深入JAVA虚拟机》,《重构改善既有代码设计》,《MySQL高性能-第3版》&…...

数据结构学习笔记——广义表

目录 一、广义表的定义二、广义表的表头和表尾三、广义表的深度和长度四、广义表与二叉树(一)广义表表示二叉树(二)广义表表示二叉树的代码实现 一、广义表的定义 广义表是线性表的进一步推广,是由n(n≥0&…...

为什么每次optimizer.zero_grad()

当你训练一个神经网络时,每一次的传播和参数更新过程可以被分解为以下步骤: 1前向传播:网络对输入数据进行操作,最终生成输出。这个过程会基于当前的参数(权重和偏差)计算出一个或多个损失函数的值。 2计…...

一个页面从输入 URL 到页面加载显示完成,这个过程中都发生了什么

一个页面从输入URL到加载显示完成经历了以下过程: DNS解析:浏览器会解析URL中的域名,将其转换为对应的IP地址。如果浏览器缓存中存在该域名的IP地址,则跳过DNS解析步骤。 建立TCP连接:通过解析得到的IP地址&#xff0…...

iOS ------ UICollectionView

一,UICollectionView的简介 UICollectionView是iOS6之后引入的一个新的UI控件,它和UITableView有着诸多的相似之处,其中许多代理方法都十分类似。简单来说,UICollectionView是比UITbleView更加强大的一个UI控件,有如下…...

ElasticSearch知识体系详解

1.介绍 ElasticSearch是基于Lucene的开源搜索及分析引擎,使用Java语言开发的搜索引擎库类,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。 它可以被下面这样准确的形容: 一个分布式的实时文档存储&#xf…...

Linux自启服务提示:systemd[1]: *.service: main process exited, code=exited, status=1问题

这两天一直在沉迷于配脚本,由于服务器很多,所以我都是从一台服务器上配置好的脚本直接copy到另一台服务器,按说完全一样的脚本一样的操作,那么应该是一样的执行结果 but, Gul’dan,代…我重启服务器后服务并没有正常启…...

LoadBalancer将服务暴露到外部实现负载均衡purelb-layer2模式配置介绍

目录 一.purelb简介 1.简介 2.purelb的layer2工作模式特点 二.layer2的配置演示 1.首先准备ipvs和arp配置环境 2.purelb部署开始 (1)下载purelb-complete.yaml文件并应用 (2)查看该有的资源是否创建完成并运行 &#xff…...

Spring Bean的生命周期各阶段详解附源码

目录 Bean的生命周期Bean定义阶段Bean实例化阶段Bean属性注入阶段Bean初始化阶段Bean销毁阶段 Bean的生命周期 bean的生命周期,我们都知道大致是分为:bean定义,bean的实例化,bean的属性注入,bean的初始化以及bean的销毁…...

LoadBalancer将服务暴露到外部实现负载均衡Openelb-layer2模式配置介绍

目录 一.openelb简介 二.主要介绍layer2模式 1.简介 2.原理 3.部署 (1)先在集群master上开启kube-proxy的strictARP (2)应用下载openelb.yaml(需要修改镜像地址) (3)编写yam…...

Android异步之旅:探索IntentService

1.介绍IntentService IntentService是Android中的一个Service类,用于在后台执行耗时操作,而不会阻塞UI线程。它封装了HandlerThread和Handler,使得我们可以方便地在后台执行任务,而不需要自己管理线程和消息处理。 以下是 Intent…...

131.类型题-计算数学序列的和,请编写函数fun,其功能是S=……【满分解题代码+详细分析】(数学序列的和类型题-C/C++JavaPython实现)

文章目录 131.类型题-计算数学序列的和:计算并输出一.题目1.1 解题思路二.解题代码2.1 C/C++解题代码2.2 python解题代码2.3 Java解题代码三.解题代码仔细分析3.1 C/C++解题代码仔细分析3.2 Java解题代码仔细分析3.3 Python解题代码仔细分析四.本类型题解题诀窍五.寄语131.类型…...

【Unity动画】状态机中层的融合原理与用法详解

1. 状态机概念介绍 在Unity中,动画状态机(Animator State Machine)是一种强大的工具,用于控制游戏对象的动画行为。动画状态机由多个动画状态Animation和过渡条件Transition、层组成!而层(Layers&#xff…...

等保之道:从基础出发,解密网站防护的重要性

随着数字化时代的推进,网站安全问题日益凸显。网站被攻击不仅会导致信息泄漏、服务中断,还可能损害用户信任和企业声誉。为了更好地解决这一问题,我们需从等保的角度审视网站防护,全面提升网络安全水平。 等保背景 等保&#xff0…...

7. 系统信息与系统资源

7. 系统信息与系统资源 1. 系统信息1.1 系统标识 uname()1.2 sysinfo()1.3 gethostname()1.4 sysconf() 2. 时间、日期2.1 Linux 系统中的时间2.1.1 Linux 怎么记录时间2.1.2 jiffies 的引入 2.2 获取时间 time/gettimeofday2.2.1 time()2.2.2 gettimeofday() 2.3 时间转换函数…...

【重点】【滑动窗口】239. 滑动窗口最大值

题目 也可参考&#xff1a;剑指offer——面试题65&#xff1a;滑动窗口的最大值 class Solution {public int[] maxSlidingWindow(int[] nums, int k) {int[] res new int[nums.length - k 1];Deque<Integer> q new LinkedList<>();int inx 0;while (inx <…...

d3dx9_43.dll丢失原因以及5个解决方法详解

在电脑使用过程中&#xff0c;我们可能会遇到一些错误提示&#xff0c;其中之一就是“d3dx9_43.dll缺失”。这个错误提示通常表示我们的电脑上缺少了DirectX的一个组件&#xff0c;而DirectX是游戏和多媒体应用所必需的软件。本文将介绍d3dx9_43.dll缺失对电脑的影响以及其原因…...

Python实现FA萤火虫优化算法优化卷积神经网络分类模型(CNN分类算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 萤火虫算法&#xff08;Fire-fly algorithm&#xff0c;FA&#xff09;由剑桥大学Yang于2009年提出 , …...

不瞒各位,不安装软件也能操作Xmind文档

大家好&#xff0c;我是小悟 作为搞技术的一个人群&#xff0c;时不时就要接收产品经理发过来的思维脑图&#xff0c;而此类文档往往是以Xmind编写的&#xff0c;如果你的电脑里面没有安装Xmind的话&#xff0c;不好意思&#xff0c;是打不开这类后缀结尾的文档。 打不开的话…...

你了解Redis 的二进制安全吗

最近面试的时候被问到Redis 的二进制安全相关八股文面试题。Redis二进制安全内容比较多&#xff0c;以下是简单的总结大致的过程&#xff0c;需要深入学习的建议跳过 Redis是基于C语言进行开发的&#xff0c;而C语言中的字符串是二进制不安全的&#xff0c;所以Redis就没有直接…...

探索前端设计的新境界——介绍IVueUI工具助力Vue页面设计

在快速发展的前端领域&#xff0c;Vue.js作为一款渐进式JavaScript框架&#xff0c;一直备受开发者喜爱。然而&#xff0c;在Vue前端开发的旅程中&#xff0c;页面设计常常是一个不可避免的挑战。今天&#xff0c;我要向大家介绍一款令Vue前端开发者受益匪浅的工具——www.ivue…...

数据管理系统-week10-数据库安全

文章目录 前言一、什么是数据库安全?二、威胁三、对抗措施四、授权和认证五、访问控制(重点)自由访问控制(DAC)强制访问控制(MAC)补充一个贝尔-lapadula模型六、加密参考文献前言 数据库安全意味着保护数据库免受有意或无意的未经授权的访问,数据库安全需要保护数据库…...

MySQL笔记-第05章_排序与分页

视频链接&#xff1a;【MySQL数据库入门到大牛&#xff0c;mysql安装到优化&#xff0c;百科全书级&#xff0c;全网天花板】 文章目录 第05章_排序与分页1. 排序数据1.1 排序规则1.2 单列排序1.3 多列排序 2. 分页2.1 背景2.2 实现规则2.3 拓展 第05章_排序与分页 讲师&#…...

MySQL笔记-第02章_MySQL环境搭建

视频链接&#xff1a;【MySQL数据库入门到大牛&#xff0c;mysql安装到优化&#xff0c;百科全书级&#xff0c;全网天花板】 文章目录 第02章_MySQL环境搭建1. MySQL的卸载步骤1&#xff1a;停止MySQL服务步骤2&#xff1a;软件的卸载步骤3&#xff1a;残余文件的清理步骤4&am…...

★136. 只出现一次的数字(位运算)

136. 只出现一次的数字 这个题主要考察的知识点是位运算&#xff08;这里是异或&#xff09; 如果不要求空间复杂度为O&#xff08;1&#xff09;&#xff0c;那有很多方法。但是这里有这样的要求。 可以通过位运算 的方法来实现。 异或运算 ⊕有以下三个性质&#xff1a; 任…...

阿里云效一键部署前后端

静态站点到OSS 阿里云-云效&#xff0c;阿里云企业级一站式 DevOps&#xff0c;可以免费使用&#xff08;会限制人数、流水线数量等&#xff0c;个人项目够用了&#xff09;。相关文章 CI 持续集成 - 阿里云云效 OSS 是对象存储的意思&#xff0c;一般一个项目对应一个 Bucke…...

【算法集训】基础数据结构:一、顺序表(上)

顺序表是最基础的数组结构&#xff0c;所有数据都按顺序存储。 第一题 1464. 数组中两元素的最大乘积 https://leetcode.cn/problems/maximum-product-of-two-elements-in-an-array/description/ 第一种&#xff1a;常规解法&#xff0c;遍历两次数组根据条件比较出最大的即可…...

封装websocket并在vuejs中调用

1、创建JS文件ce-websocket-util.js class CeWebsocketUtil {websocket null;reConnectTimes 0; // 失败后重新连接次数wsInterVal null; // 重新连接定时器maxReConnectTimes 10; // 最大连接次数,默认10次reIntervalTime 60 * 1000; // 重连间隔时间&#xff0c;默认1m…...

如何在网站添加代码/seo日常工作内容

双向循环链表定义 双向链表的每个结点需要连接前一个结点和后一个结点&#xff0c;所以需要定义两个指针域&#xff0c;分别指向前一个结点和后一个结点。 双向链表中头节点的prev指针指向尾节点&#xff0c;尾节点的next指针指向头节点。 双向循环链表图示 说明&#xff1…...

中国核工业华兴建设公司网站/深圳网络推广服务公司

两独立样本Wilcoxon检验&#xff08;也称为Wilcoxon秩和检验或Mann-Whitney检验&#xff09;是一种非参数替代配对双样本t检验&#xff0c;其可以被用于比较样品的两个独立的组。当您的数据不是正态分布时使用。在第九讲中&#xff0c;我们讲到了两独立样本t检验的假设条件是样…...

家电网站建设/免费b站推广网站入口202

x4bx2c0有四个根a1,a2,a3,a4x^4bx^2c0有四个根a_1,a_2,a_3,a_4x4bx2c0有四个根a1​,a2​,a3​,a4​ Q条件or关系FQ(a,b){a1a20a3a40\begin{cases}a_1a_20& \text{}\\a_3a_40& \text{}\end{cases}{a1​a2​0a3​a4​0​​保持上述关系不变的置换有8个F1F(b2−4c)F1F(\s…...

做网购的有哪几个网站/东莞seo管理

用JQuery Validate框架&#xff0c;在IE8下验证报错问题解决参考文章&#xff1a; &#xff08;1&#xff09;用JQuery Validate框架&#xff0c;在IE8下验证报错问题解决 &#xff08;2&#xff09;https://www.cnblogs.com/destimarve/p/5511257.html 备忘一下。...

wordpress主动提交百度/济南网络优化网站

今年9月10号华为开发者大会中&#xff0c;华为正式开源发布了鸿蒙os 2.0系统&#xff0c;鸿蒙终于开放给开发者&#xff0c;目前只能用来做指挥屏/手表/车机。华为手机版本的鸿蒙系统则要到今年的12月才提供。在9月10号我就去鸿蒙gitee上的开源代码库中参观&#xff0c;主要是看…...

美国做调查的网站/短视频seo系统

据国外媒体报道&#xff0c;惠普公司8月23日宣布&#xff0c;计划以16亿美元竞购虚拟存储制造商3PAR。而在一周前&#xff0c;戴尔公司曾出价11.5亿美元收购此公司。 惠普是在给3PAR的董事长和CEO的信中透露其收购价格的。惠普执行副总裁兼首席战略和技术官谢恩罗宾逊&#xff…...