maven的生命周期是什么?看这一篇就够了!

news2024/11/19 15:20:45

大家可能都知道maven是什么?Maven 是一个流行的项目管理工具,用于构建、发布和管理 Java 项目。那么我们在用maven将项目打包成一个jar包的时候,他是怎么运作的,mvn clean install都做了哪些小动作?其中的package和install有什么区别?deploy命令又是干什么的?不知道这些问题大家有没有想过?

Maven生命周期包括三个主要阶段:clean、default、site。

  1. clean生命周期:用于清理项目,包括删除target目录中生成的文件。

  2. default生命周期:包括validate、initialize、generate-sources、process-sources、generate-resources、process-resources、compile、process-classes、generate-test-sources、process-test-sources、generate-test-resources、process-test-resources、test-compile、process-test-classes、test、prepare-package、package、pre-integration-test、integration-test、post-integration-test、verify、install、deploy等阶段。

  3. site生命周期:用于生成项目站点文档等内容。

而我们这次就讲idea中的主要用到的命令,我们先来看一张图(idea中的maven工具栏,默认在idea的右侧):

在这里插入图片描述

这里有这么多命令,大家知道他们的具体作用是干嘛的吗?而他们又做了哪些小动作呢?这些统称为maven的生命周期。首先我们来了解他们之前先看一下maven的本地仓库:

maven的本地仓库

上面就是maven的本地仓库,即maven默认会从本地拿到项目中用到的jar包,如果没有就会从中央仓库拉,之后在存到本地里面。简单介绍一下,废话不多说,我们现在开始介绍maven的生命周期。开始之前想跟大家说一个冷知识:

执行maven命令和直接点击idea中的maven菜单按钮都是可以的,但是如果手动执行maven命令的化,需要添加很多的参数,例如默认只会读取默认的setting文件,而idea中的maven菜单则会根据项目的maven已经设置过的东西进行参数的拼接(他的底层也是执行maven的命令)

我们现在有一个项目的pom文件长这样(他是一个springboot项目)

在这里插入图片描述

clean:清理项目,删除之前构建生成的文件

现在我们在项目运行的过程中生成了一个jar包。如果我们运行clean的话,这个时候,我们就会发现项目目录下的target文件夹就会被清除掉。

请添加图片描述

validate: 验证项目是否正确,检查项目是否符合规范

它主要做了下面几个验证:
验证项目是否有pom.xml文件。
验证pom.xml文件是否符合Maven的XML格式要求。
验证所有必要的属性是否已经设置。
验证项目的依赖是否正确,无误。
验证编译源代码的编码是否正确。

例如我们把pom文件删掉

在这里插入图片描述

然后执行我们的mvn validate

在这里插入图片描述

他就会检测失败,而添加之后再次执行,就会执行成功了

在这里插入图片描述

compile:编译项目源代码,将源代码编译成可执行的字节码

这个命令是会生成target目录下面的classes文件,这个里面则是编译好的字节码文件,如果有main函数则是可以直接运行的

请添加图片描述

test:运行测试代码,执行单元测试和集成测试

例如我们现在有个一单元用例:

package com.wangfugui.apprentice;

import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
class ApprenticeApplicationTests {

    @Test
    public void test() {
        System.out.println("测试");
    }
}

我们执行这个命令之后就会把这个单元用例里面的每个方法都执行一遍:

在这里插入图片描述

package:将编译后的代码打包成可分发的格式,如 JAR、WAR 等。

请添加图片描述

这个命令默认会在target目录下生成jar包,如果有maven插件指定生成路径则是另说。

verify:对集成测试的结果进行验证,确保测试通过

它其实也会执行单元测试,但是他和test有什么区别呢?为了验证他们的区别,我们需要引入一个maven的插件

 <build>
        <plugins>
            <!-- 插件用于执行静态代码分析 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-checkstyle-plugin</artifactId>
                <version>3.1.1</version>
                <executions>
                    <execution>
                        <id>validate</id>
                        <phase>verify</phase>
                        <goals>
                            <goal>check</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

maven-checkstyle-plugin 用于执行静态代码分析,具体功能包括:

  1. 代码风格检查:检查代码是否符合预定义的代码风格规范,如缩进、命名规范、代码注释等。
  2. 代码质量检查:分析代码质量,发现潜在的代码问题,如未使用的变量、重复的代码、复杂的逻辑等。
  3. 代码规范性检查:检查代码是否符合编码规范,帮助团队保持一致的编码风格和规范。

在这里插入图片描述

我们执行verify就会发现测试失败了,原因是这个类缺少空行结尾,现在我们把他修复,我们就会发现刚刚那个错误就没有了。

在这里插入图片描述

但是这个在实际项目的过程中并不会用到(谁去检测是否以换行结尾啊。。。)大家了解一下就行。

install:将包安装到本地仓库,供本地其他项目使用

这个命令就要说道我们前面提到的本地maven仓库了,执行这个命令之后,maven会把打出的jar包放入我们的maven本地仓库,这样其他的项目就可以引用这个jar包了

在这里插入图片描述

site:生成项目站点文档,包括项目报告、文档和静态内容

  <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-site-plugin</artifactId>
                <version>3.9.1</version>
            </plugin>
        </plugins>
    </build>

试图这个功能之前,需要引入一个maven的插件。maven-site-plugin 是 Maven 中的一个核心插件,用于生成项目站点文档。通过配置这个插件,大家可以在 Maven 构建过程中执行 site 命令来生成项目站点文档。以下是这个插件的一些主要功能和用途:

  1. 生成项目站点文档:maven-site-plugin 插件用于生成项目站点文档,包括项目报告、文档和静态内容,以展示项目的信息和文档。
  2. 集成各种报告:该插件可以集成各种 Maven 报告,如测试报告、代码覆盖率报告、静态代码分析报告等,以展示项目的各种指标和结果。
  3. 自定义站点内容:您可以通过配置插件参数来自定义生成的站点内容,包括添加额外的文档、报告和静态资源。
  4. 支持多种输出格式:maven-site-plugin 支持生成站点文档的多种输出格式,如 HTML、PDF 等,以满足不同的需求。

例如我们执行完项目文件之后会在target/site目录下面生成一个静态网站:

在这里插入图片描述

我们点开看看是这样的:

在这里插入图片描述

默认情况下,通过 Maven 的 maven-site-plugin 插件生成的项目站点文档通常包含以下内容:

  1. 项目概况:包括项目的名称、描述、版本号等基本信息。
  2. 项目报告:包括各种 Maven 插件生成的报告,如测试报告、代码覆盖率报告、静态代码分析报告等。
  3. 项目结构:展示项目的目录结构、模块依赖关系等信息。
  4. 开发者信息:列出项目的开发者、贡献者等相关信息。
  5. 源码文档:包括 Java 源代码的文档,通常是通过 Javadoc 工具生成的 API 文档。
  6. 邮件列表:列出项目相关的邮件列表信息。
  7. 版本控制信息:包括项目的版本控制信息,如提交记录、分支信息等。
    问题追踪:列出项目的问题追踪系统信息,如 JIRA、Bugzilla 等。
  8. 构建信息:展示项目的构建信息,包括构建时间、构建环境等。
  9. 发布信息:包括项目的发布信息,如发布版本、发布日期等。

deploy:将最终包复制到远程仓库,供其他开发人员或项目使用

在这里插入图片描述

这里会打包发布到中央的maven仓库,这样不管别人在哪都可以直接拉你的jar到他的项目中去使用,大家可以参考我之前写的博客:
如何发布jar包到maven中央仓库(2024年3月最新版保姆级教程)

在这里插入图片描述

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

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

相关文章

《web应用技术》第十二次课后作业

1.servlet基础知识 1.定义 Java Servlet 是运行在 Web 服务器或应用服务器上的程序&#xff0c;它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。 2.生命周期 init 方法被设计成只调用一次。它在第一次创建 Servlet 时被…

Python酷库之旅-第三方库openpyxl(07)

目录 一、 openpyxl库的由来 1、背景 2、起源 3、发展 4、特点 4-1、支持.xlsx格式 4-2、读写Excel文件 4-3、操作单元格 4-4、创建和修改工作表 4-5、样式设置 4-6、图表和公式 4-7、支持数字和日期格式 二、openpyxl库的优缺点 1、优点 1-1、支持现代Excel格式…

SVM算法-人脸识别背后技术详解

引言 支持向量机&#xff08;SVM&#xff09;是一种强大的监督学习算法&#xff0c;广泛应用于分类和回归任务中。本文将详细介绍SVM算法在人脸识别任务中的应用&#xff0c;并通过代码示例来展示其背后的技术精髓。我们将分三大部分来展开&#xff0c;本部分将重点介绍SVM算法…

数据资产与人才战略:聚焦数据人才培养与引进,构建专业团队,为企业数据资产增值提供源源不断的智力支持,确保数据资产的高效利用与持续增长

一、引言 随着信息技术的飞速发展&#xff0c;数据已成为企业最宝贵的资产之一。在数字化时代&#xff0c;数据资产的高效利用和持续增长对于企业的竞争力至关重要。而要实现这一目标&#xff0c;人才是关键。本文将围绕数据资产与人才战略展开讨论&#xff0c;重点分析数据人…

【喜报】全球第三名HCIE-openEuler在誉天诞生!

2024年6月18日&#xff0c;誉天首期HCIE-openEuler班刘同学一次性通过HCIE-openEuler实验考试&#xff0c;并且成为全球第三位HCIE-openEuler专家,刘同学也是誉天首位通过该方向的HCIE学员。 同时恭喜刘同学获得誉天欧拉HCIE专属奖学金5000元&#xff0c;让我们祝贺他&#xff…

我的常见问题记录

1,maven在idea工具可以正常使用,在命令窗口执行出现问题 代码: E:\test-hello\simple-test>mvn clean compile [INFO] Scanning for projects... [WARNING] [WARNING] Some problems were encountered while building the effective model for org.consola:simple-test:jar…

win11 + ubuntu linux双系统:开机直接进入windows修复

https://zhuanlan.zhihu.com/p/666702893 这种 双系统直接进入win 的问题&#xff0c;应该属于引导坏了&#xff0c;即grub坏了。 原因&#xff1a;笔记本送修了&#xff0c;没拆掉硬盘&#xff0c;可能引导被售后搞坏了。 在win-磁盘管理中查看分区&#xff0c;linux的分区…

文献阅读:通过双线性建模来破译神经元类型连接的遗传密码

文献介绍 文献题目 Deciphering the genetic code of neuronal type connectivity through bilinear modeling 研究团队 Mu Qiao&#xff08;美国加州理工学院&#xff09; 发表时间 2024-06-10 发表期刊 eLife 影响因子 7.7 DOI 10.7554/eLife.91532.3 摘要 了解不同神经元…

仓库管理系统01--数据库介绍

1、表结构 1&#xff09;UserInfo 用户表 2&#xff09;Supplier供应商表 3&#xff09;Store 仓库表 4&#xff09;其他表 Customer 客户表&#xff0c;Spec 规格表&#xff0c;GoodsType 货物类别表&#xff0c;Goods 货物表&#xff0c;InStore 入库表&#xff0c;OutSto…

STM32 - LED灯 蜂鸣器

&#x1f6a9; WRITE IN FRONT &#x1f6a9; &#x1f50e; 介绍&#xff1a;"謓泽"正在路上朝着"攻城狮"方向"前进四" &#x1f50e;&#x1f3c5; 荣誉&#xff1a;2021|2022年度博客之星物联网与嵌入式开发TOP5|TOP4、2021|2222年获评…

mysql学习——SQL中的DQL和DCL

SQL中的DQL和DCL DQL基本查询条件查询聚合函数分组查询排序查询分页查询 DCL管理用户权限控制 学习黑马MySQL课程&#xff0c;记录笔记&#xff0c;用于复习。 DQL DQL英文全称是Data Query Language(数据查询语言)&#xff0c;数据查询语言&#xff0c;用来查询数据库中表的记…

为什么能通过文本分析情感?

通过文本分析情感&#xff0c;通常称为情感分析&#xff08;Sentiment Analysis&#xff09;或意见挖掘&#xff08;Opinion Mining&#xff09;&#xff0c;是自然语言处理&#xff08;NLP&#xff09;的一个分支。这项技术能够识别和提取文本中的主观信息&#xff08;对呀&am…

# 消息中间件 RocketMQ 高级功能和源码分析(八)

消息中间件 RocketMQ 高级功能和源码分析&#xff08;八&#xff09; 一、消息中间件 RocketMQ 源码分析&#xff1a;实时更新消息消费队列与索引文件流程说明 1、实时更新消息消费队列与索引文件 消息消费队文件、消息属性索引文件都是基于 CommitLog 文件构建的&#xff0…

pdf转word在线转换怎么操作?学会这3个,轻松完成转换

pdf转word在线转换怎么操作&#xff1f;PDF转Word在线转换的重要性不言而喻&#xff0c;特别是在需要编辑或修改PDF文件内容时。它极大地简化了繁琐的复制粘贴流程&#xff0c;允许我们直接在Word文档中修改文字、调整格式&#xff0c;大大提高了工作效率。无论是学术研究、商务…

Modsecurity安装+Nginx+腾讯云CentOS+XSS-Labs靶场+WAF规则

君衍. 一、项目环境介绍二、ModSecurity介绍1、Modsecurity基本概述2、Modsecurity工作原理3、Modsecurity功能特点4、Modsecurity优点5、Modsecurity缺点 三、Nginx介绍及配置文件1、Nginx基本概述2、Nginx应用场景3、正向代理4、反向代理5、负载均衡6、动静分离7、主页面路径…

【LinuxC语言】深入理解IP地址与端口号

文章目录 前言端口号IP地址IP地址的分类主机地址与网络地址多播是什么子网掩码特殊的地址与私有的地址总结前言 在计算机网络中,IP 地址和端口号是两个非常重要的概念。IP 地址用于标识网络上的设备,而端口号则用于在同一设备上区分不同的服务或应用。在 Linux C 语言编程中…

一文学会用RKE部署高可用Kubernetes集群

k8s架构图 RKE简介 RKE全称Rancher Kubernetes Engine,是一个快速的,多功能的 Kubernetes 安装工具。通过RKE,我们可以快速的安装一个高可用K8S集群。RKE 支持多种操作系统,包括 MacOS、Linux 和 Windows。 K8S原生安装需要的先决条件较多,比如说需要预安装kubeadm,kub…

GPT-5大幅推迟?OpenAI CTO称将在2025年底到2026年初推出

GPT-5大幅推迟&#xff1f;OpenAI CTO称将在2025年底到2026年初推出 OpenAI CTO同时透露&#xff0c;GPT-5性能将有巨大飞跃&#xff0c;在某些特定任务中达到“博士水平”智能&#xff0c;此前市场曾预测GPT-5可能在2023年底或2024年夏季发布。 一再跳票的GPT-5可能大幅推迟…

基于matlab的SVR回归预测

1 原理 SVR&#xff08;Support Vector Regression&#xff09;回归预测原理&#xff0c;基于支持向量机&#xff08;SVM&#xff09;的回归分支&#xff0c;其核心思想是通过寻找一个最优的超平面来进行回归预测&#xff0c;并处理非线性回归问题。以下是SVR回归预测原理的系统…

腾讯 MOFA-Video: 可控制图转视频

腾讯 MOFA-Video: 可控制图转视频 MOFA-Video 它支持运动轨迹、人脸关键点并支持将其混合控制图像转换为视频。 混合控制: 结合图像、控制信号和关键点生成动画。 运动画笔: 结合图像、轨迹和画笔生成动画。 控制比例: 调整动画的控制比例&#xff0c;从纯 SVD 到完全控制。 通…