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

【maven-6】Maven 生命周期相关命令演示

Maven 是一个广泛使用的项目管理工具,尤其在 Java 项目中。它通过定义一系列的生命周期阶段(Phases)来管理项目的构建过程。理解这些生命周期阶段及其相关命令,对于高效地构建和管理项目至关重要。本文将通过实际演示,详细介绍 Maven 的生命周期及其相关命令。

1. Maven 生命周期概述

Maven 的生命周期分为三个主要的生命周期:

  1. Clean Lifecycle: 用于清理项目。
  2. Default Lifecycle: 用于构建项目。
  3. Site Lifecycle: 用于生成项目站点文档。

每个生命周期由一系列的阶段(Phases)组成,每个阶段代表了一个特定的构建步骤。

1.1 Clean Lifecycle

Clean Lifecycle 包含以下几个阶段:

  • pre-clean: 执行一些清理前的准备工作。
  • clean: 删除之前构建生成的所有文件。
  • post-clean: 执行一些清理后的操作。

1.2 Default Lifecycle

Default Lifecycle 包含多个阶段,以下是一些关键阶段:

  • validate: 验证项目是否正确,所有必要信息是否可用。
  • compile: 编译项目的源代码。
  • test: 使用单元测试框架测试编译后的源代码。
  • package: 将编译后的代码打包成可分发的格式(如 JAR、WAR 等)。
  • verify: 对集成测试的结果进行检查,确保质量标准。
  • install: 将包安装到本地仓库,供其他项目使用。
  • deploy: 将最终的包复制到远程仓库,供其他开发人员和项目使用。

1.3 Site Lifecycle

Site Lifecycle 包含以下几个阶段:

  • pre-site: 执行一些生成站点前的准备工作。
  • site: 生成项目的站点文档。
  • post-site: 执行一些生成站点后的操作。
  • site-deploy: 将生成的站点文档部署到指定的服务器。

2. Maven 生命周期相关命令演示

接下来,我们将通过实际操作演示 Maven 生命周期中的关键命令。

2.1 Clean Lifecycle 相关命令

2.1.1 mvn clean

mvn clean 命令用于删除之前构建生成的所有文件。

mvn clean

执行该命令后,Maven 会删除 target 目录下的所有文件和目录。

未清理前:

在这里插入图片描述

执行清理:

在这里插入图片描述
清理之后:

在这里插入图片描述

2.2 Default Lifecycle 相关命令

2.2.1 mvn validate

mvn validate 命令用于验证项目是否正确,所有必要信息是否可用。

mvn validate

该命令通常在构建过程的早期执行,以确保项目的基本配置是正确的。

2.2.2 mvn compile

mvn compile 命令用于编译项目的源代码。

mvn compile

执行该命令后,Maven 会将项目的源代码编译成字节码,并生成相应的类文件。

在这里插入图片描述

2.2.3 mvn test

mvn test 命令用于运行项目的单元测试。

mvn test

执行该命令后,Maven 会运行项目中的所有单元测试,并生成测试报告。

test命令的作用是编译并运行maven项目的src/test目录下的junit测试代码。注意:只能运行junit测试代码。 并且使用test运行的测试类的类名必须以Test结尾,否则不会运行,不会看到结果。

在test/java目录下创建一个测试类,书写测试方法,代码如下:

import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;/*** Unit test for simple App.*/
public class AppTest extends TestCase
{/*** Create the test case** @param testName name of the test case*/public AppTest( String testName ){super( testName );}/*** @return the suite of tests being tested*/public static Test suite(){return new TestSuite( AppTest.class );}/*** Rigourous Test :-)*/public void testApp(){assertTrue( true );}
}

编译后生成的文件:

在这里插入图片描述

运行日志:

在这里插入图片描述
注意:

​ 1.test命令只能运行test目录下的junit包下的类

​ 2.test命令也可以运行多个测试方法:

import org.junit.Test;public class MavenTest {@Testpublic void show() {System.out.println("show............");}@Testpublic void show1() {System.out.println("show1............");}@Testpublic void show2() {System.out.println("show2............");}
}

在这里插入图片描述

2.2.4 mvn package

mvn package 命令用于将编译后的代码打包成可分发的格式(如 JAR、WAR 等)。

mvn package

执行该命令后,Maven 会将编译后的代码打包成一个 JAR 或 WAR 文件,并存放在 target 目录下。

在这里插入图片描述
注意:每次打包前还会再次执行所有test命令

2.2.5 mvn verify

mvn verify 命令用于对集成测试的结果进行检查,确保质量标准。

mvn verify

该命令通常在 package 阶段之后执行,用于验证打包后的代码是否符合质量标准。

2.2.6 mvn install

mvn install 命令用于将包安装到本地仓库,供其他项目使用。

mvn install

执行该命令后,Maven 会将打包后的文件安装到本地 Maven 仓库中,供其他项目引用。

在这里插入图片描述
在这里插入图片描述

注意:每次安装前还会再次执行所有test命令

2.2.7 mvn deploy

mvn deploy 命令用于将最终的包复制到远程仓库,供其他开发人员和项目使用。

mvn deploy

执行该命令后,Maven 会将打包后的文件部署到远程 Maven 仓库中,供其他开发人员和项目引用。

2.3 Site Lifecycle 相关命令

2.3.1 mvn site

mvn site 命令用于生成项目的站点文档。

mvn site

执行该命令后,Maven 会生成项目的站点文档,并存放在 target/site 目录下。

2.3.2 mvn site-deploy

mvn site-deploy 命令用于将生成的站点文档部署到指定的服务器。

mvn site-deploy

执行该命令后,Maven 会将生成的站点文档部署到指定的服务器上。

2.4 组合命令

Maven 允许将多个生命周期阶段组合在一起执行。例如:

2.4.1 mvn clean install

mvn clean install 命令用于先清理项目,然后安装包到本地仓库。

mvn clean install

执行该命令后,Maven 会先删除 target 目录下的所有文件,然后编译、测试、打包并安装到本地仓库。

2.4.2 mvn clean package

mvn clean package 命令用于先清理项目,然后打包代码。

mvn clean package

执行该命令后,Maven 会先删除 target 目录下的所有文件,然后编译、测试并打包代码。

3. 插件与生命周期

Maven 的生命周期阶段是通过插件(Plugins)来实现的。每个阶段都对应一个或多个插件的目标(Goals)。例如,compile 阶段通常由 maven-compiler-plugin 插件的 compile 目标来执行。

你可以通过配置 pom.xml 文件来定制插件的行为,例如指定编译器的版本、源代码的编码等。

4. 总结

Maven 的生命周期是项目构建的核心,理解并掌握这些生命周期阶段及其相关命令,可以帮助你更高效地管理和构建 Java 项目。通过组合不同的生命周期阶段,你可以灵活地执行各种构建任务,确保项目的质量和可维护性。

相关文章:

【maven-6】Maven 生命周期相关命令演示

Maven 是一个广泛使用的项目管理工具,尤其在 Java 项目中。它通过定义一系列的生命周期阶段(Phases)来管理项目的构建过程。理解这些生命周期阶段及其相关命令,对于高效地构建和管理项目至关重要。本文将通过实际演示,…...

黑马程序员Java笔记整理(day06)

1.继承的特点 2.继承的权限 3. 4.小结 5.方法重写 6.子类构造器 7.兄弟构造器 8.多态 9.小结...

LeetCode【代码随想录】刷题(动态规划篇)

509. 斐波那契数 力扣题目链接 题目:斐波那契数(通常用F(n)表示)形成的序列称为斐波那契数列 。该数列由0和1开始,后面的每一项数字都是前面两项数字的和。也就是: F(0) 0,F(1) 1 F(n) F(n - 1) F(n…...

【看海的算法日记✨优选篇✨】第三回:二分之妙,寻径中道

🎬 个人主页:谁在夜里看海. 📖 个人专栏:《C系列》《Linux系列》《算法系列》 ⛰️ 一念既出,万山无阻 目录 📖一、算法思想 细节问题 📚左右临界 📚中点选择 📚…...

基于yolov8、yolov5的铝材缺陷检测识别系统(含UI界面、训练好的模型、Python代码、数据集)

摘要:铝材缺陷检测在现代工业生产和质量管理中具有重要意义,不仅能帮助企业实时监控铝材质量,还为智能化生产系统提供了可靠的数据支撑。本文介绍了一款基于YOLOv8、YOLOv5等深度学习框架的铝材缺陷检测模型,该模型使用了大量包含…...

计算机光电成像理论基础

一、透过散射介质成像 1.1 光在散射介质中传输 光子携带物体信息并进行成像的过程是一个涉及光与物质相互作用的物理现象。这个过程可以分为几个步骤来理解: 1. **光的发射或反射**: - 自然界中的物体可以发射光(如太阳)&am…...

【QNX+Android虚拟化方案】125 - 如何创建android-spare镜像

【QNX+Android虚拟化方案】125 - 如何创建android-spare镜像 1. Android侧创建 (ext4 / sparse) test_img.img 镜像 方法一2. Android侧创建 (ext4 / sparse) test_img.img 镜像 方法二3. qnx 侧 分区透传Android 配置3.1 配置分区透传3.2 Android 侧分区 rename3.3 创建挂载目…...

深度学习基础小结_项目实战:手机价格预测

目录 库函数导入 一、构建数据集 二、构建分类网络模型 三、编写训练函数 四、编写评估函数 五、网络性能调优 鲍勃开了自己的手机公司。他想与苹果、三星等大公司展开硬仗。 他不知道如何估算自己公司生产的手机的价格。在这个竞争激烈的手机市场,你不能简单地…...

EMall实践DDD模拟电商系统总结

目录 一、事件风暴 二、系统用例 三、领域上下文 四、架构设计 (一)六边形架构 (二)系统分层 五、系统实现 (一)项目结构 (二)提交订单功能实现 (三&#xff0…...

【随笔】AI技术在电商中的应用

这几年,伴随着ChatGPT开始的AI浪潮席卷全球,从聊天场景逐步向多场景扩散,形成了广泛开花的现象。至今,虽然在部分场景的进展已经略显疲态,但当前的这种趋势仍然还在不断的扩展。不少公司,甚至有不少大型电商…...

序列式容器详细攻略(vector、list)C++

vector std::vector 是 STL 提供的 内存连续的、可变长度 的数组(亦称列表)数据结构。能够提供线性复杂度的插入和删除,以及常数复杂度的随机访问。 为什么要使用 vector 作为 OIer,对程序效率的追求远比对工程级别的稳定性要高得多,而 vector 由于其对内存的动态处理,…...

快速启动项目

1 后端项目 https://gitee.com/liuyunkai666/gungun-boot.git 分支: mini 是 springboot3 jdk17 的基础版本,后续其他功能模块陆续在其基础上追加即可​。 1.1 必备环境 1.1.1 mysql 创建一个 自定义名称 数据库,【只要】 执行对应数据库…...

springboot347基于web的铁路订票管理系统(论文+源码)_kaic

摘 要 当今社会进入了科技进步、经济社会快速发展的新时代。计算机技术对经济社会发展和人民生活改善的影响也日益突出,人类的生存和思考方式也产生了变化。传统铁路订票管理采取了人工的管理方法,但这种管理方法存在着许多弊端,比如效率低…...

使用API管理Dynadot域名,在账户中添加域名服务器(Name Server)

前言 Dynadot是通过ICANN认证的域名注册商,自2002年成立以来,服务于全球108个国家和地区的客户,为数以万计的客户提供简洁,优惠,安全的域名注册以及管理服务。 Dynadot平台操作教程索引(包括域名邮箱&…...

【Linux | 计网】TCP协议深度解析:从连接管理到流量控制与滑动窗口

目录 前言: 1、三次握手和四次挥手的联系: 为什么挥手必须要将ACK和FIN分开呢? 2.理解 CLOSE_WAIT 状态 CLOSE_WAIT状态的特点 3.FIN_WAIT状态讲解 3.1、FIN_WAIT_1状态 3.2、FIN_WAIT_2状态 3.3、FIN_WAIT状态的作用与意义 4.理解…...

go语言的成神之路-筑基篇-对文件的操作

目录 一、对文件的读写 Reader 接口 Writer接口 copy接口 bufio的使用 ioutil库 二、cat命令 三、包 1. 包的声明 2. 导入包 3. 包的可见性 4. 包的初始化 5. 标准库包 6. 第三方包 7. 包的组织 8. 包的别名 9. 包的路径 10. 包的版本管理 四、go mod 1. 初始…...

两道数据结构编程题

1.写出在顺序存储结构下将线性表逆转的算法,要求使用最少的附加空间。 解:输入:长度为n的线性表数组A(1:n) 输出:逆转后的长度为n的线性表数组A(1:n)。 C语言描述如下(其中ET为数据元素的类型):…...

【Qt】QDateTimeEdit控件实现清空(不保留默认时间/最小时间)

一、QDateTimeEdit控件 QDateTimeEdit 提供了一个用于编辑日期和时间的控件。用户可以通过键盘或使用上下箭头键来增加或减少日期和时间值。日期和时间的显示格式根据设置的格式显示,可以通过 setDisplayFormat() 方法来设置。 二、如何清空 我在使用的时候&#…...

12、字符串

1、字符串概念 字符串用来存储一组字符,因此需要字符数组来存。 C语言中字符串的表示 C语言里面字符串只能用字符数组来存 字符串要求这个数组的末尾必须至少有一个\0 char ch1[] {a,b,c}; // 不是字符串 char ch2[5] {h,e,l,l,o}; // 不是字符串 char…...

DPDK用户态协议栈-Tcp Posix API 1

和udp一样&#xff0c;我们需要实现和系统调用一样的接口来实现我们的tcp server。先来看看我们之前写的unix_tcp使用了哪些接口&#xff0c;这边我加上两个系统调用&#xff0c;分别是接收数据和发送数据。 #include <stdio.h> #include <arpa/inet.h> #include …...

【人工智能-科普】图神经网络(GNN):与传统神经网络的区别与优势

文章目录 图神经网络(GNN):与传统神经网络的区别与优势什么是图神经网络?图的基本概念GNN的工作原理GNN与传统神经网络的不同1. 数据结构的不同2. 信息传递方式的不同3. 模型的可扩展性4. 局部与全局信息的结合GNN的应用领域总结图神经网络(GNN):与传统神经网络的区别与…...

LabVIEW实现UDP通信

目录 1、UDP通信原理 2、硬件环境部署 3、云端环境部署 4、UDP通信函数 5、程序架构 6、前面板设计 7、程序框图设计 8、测试验证 本专栏以LabVIEW为开发平台,讲解物联网通信组网原理与开发方法,覆盖RS232、TCP、MQTT、蓝牙、Wi-Fi、NB-IoT等协议。 结合实际案例,展示如何利…...

[pdf,epub]228页《分析模式》漫谈合集01-45提供下载

《分析模式》漫谈合集01-45的pdf、epub文件提供下载。已上传至本号的CSDN资源。 如果CSDN资源下载有问题&#xff0c;可到umlchina.com/url/ap.html。 已排版成适合手机阅读&#xff0c;pdf的排版更好一些。 ★UMLChina为什么叒要翻译《分析模式》&#xff1f; ★[缝合故事]…...

Kafka的消费消息是如何传递的?

大家好&#xff0c;我是锋哥。今天分享关于【Kafka的消费消息是如何传递的&#xff1f;】面试题。希望对大家有帮助&#xff1b; Kafka的消费消息是如何传递的&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 在Kafka中&#xff0c;消息的消费是通过消费…...

二分查找(Java实现)(1)

二分查找&#xff08;Java实现&#xff09;&#xff08;1&#xff09; leetcode 34.排序数组中查找元素第一个和最后一个位置 题目描述: 给你一个按照非递减顺序排列的整数数组 nums&#xff0c;和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。 如…...

力扣103.二叉树的锯齿形层序遍历

题目描述 题目链接103. 二叉树的锯齿形层序遍历 给你二叉树的根节点 root &#xff0c;返回其节点值的 锯齿形层序遍历 。&#xff08;即先从左往右&#xff0c;再从右往左进行下一层遍历&#xff0c;以此类推&#xff0c;层与层之间交替进行&#xff09;。 示例 1&#xff…...

Search with Orama

1.前言 在不久之前&#xff0c;我把 DevNow 的搜索组件通过 Lunr 进行了重构&#xff0c;从前端角度实现了对文章内容的搜索&#xff0c;但是在使用体验上&#xff0c;感觉不是特别好&#xff0c;大概有如下几个原因&#xff1a; 社区的文章数量比较少&#xff0c;项目的 Com…...

一万台服务器用saltstack还是ansible?

一万台服务器用saltstack还是ansible? 选择使用 SaltStack 还是 Ansible 来管理一万台服务器&#xff0c;取决于几个关键因素&#xff0c;如性能、扩展性、易用性、配置管理需求和团队的熟悉度。以下是两者的对比分析&#xff0c;帮助你做出决策&#xff1a; SaltStack&…...

计算机类大厂实习春招秋招开发算法面试问答练习题

计算机类大厂实习春招秋招开发算法面试问答练习题 下面有十个非常重要且常问,面试者却注意不到的问题,我们一个个来看,一个个来学。 线程创建到删除过程中,底层是怎么实现的 1.线程创建 线程创建是线程生命周期的起点。在操作系统中,线程可以通过多种方式创建,但无论哪…...

【热门主题】000068 筑牢网络安全防线:守护数字世界的坚实堡垒

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享一篇文章&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 目录 【热…...

烽火台网站/企业百度推广怎么收费

linux 上tomcat 服务器抛出socket异常“文件打开太多”的问题 java.net.SocketException: Too many open files at java.net.PlainSocketImpl.socketAccept(Native Method) at java.net.PlainSocketImpl.accept(PlainSocketImpl.java:384) at java.net.ServerSocket.implAccep…...

网站设计合同/百度双十一活动

我是linux 的服务器&#xff0c;navicat12的客户端&#xff0c; 开始链接的时候需要开服务器上得对外爆漏端口 3306&#xff0c;方法&#xff1a; 添加指定需要开放的端口&#xff1a; firewall-cmd --add-port123/tcp --permanent 重载入添加的端口&#xff1a; firewall-cmd …...

网页标准化对网站开发维护的好处/海南百度推广代理商

网上说的基本都是使用express或http-server作为服务器或其它什么东西自己把玩php也有些年头&#xff0c;就用php好了 服务环境 apache&#xff0c;php先配置好隐藏php后缀扩展名: 在httpd.conf中 FilesMatch 标签内增加&#xff1a;ForceType application/x-httpd-php 这样只针…...

前端做兼职网站/搜索引擎seo推广

http://acm.timus.ru/problem.aspx?space1&num1806 只要算法对 ural 一般不会卡时间的 这个题是一个简单的最短路 spfa 关键在于找边 找边的方法是 对于每一个点 枚举它的所有可能的变化 搜索是否有和变化后的字符串一样的 搜索的时候既可以用 map 也可以 自己写字典树 m…...

以后做网站发展前途/宁波seo高级方法

来自&#xff1a;http://www.cnblogs.com/zhwl/archive/2012/06/06/2538494.html 对于iphone开发人员来说&#xff0c;内存管理是极为重要的技巧&#xff0c;哪怕程序的功能再强大&#xff0c;设计再漂亮&#xff0c;如果内存控制不好&#xff0c;也难逃程序莫名退出的噩运&…...

专业建站开发/网络营销培训课程

注&#xff1a;以下内容适用于WPF、C#编码。 最近对异步编程产生了较大的兴趣&#xff0c;所以写出来和感兴趣的朋友一起分享&#xff01; 1、关于Dispatcher 调度类&#xff1a; 提供用于管理线程的工作项队列的服务。 通常&#xff0c;WPF 应用程序从两个线程开始&#…...