深入理解 Maven 生命周期与常用命令:从编译到安装

Maven 是 Java 项目管理中不可或缺的工具之一,其核心功能包括依赖管理、项目构建和发布等。本文将围绕 Maven 的生命周期及常用命令,解析从项目编译到安装的完整流程,并结合实际案例帮助读者更好地掌握 Maven 的使用。


1. Maven 生命周期概述

Maven 的构建过程由多个生命周期(Lifecycle)组成,每个生命周期又包含若干阶段(Phase)。生命周期可以看作是一组有序的任务,按阶段依次执行。

Maven 有三个主要的生命周期:

  • 默认生命周期(default):包含构建项目的核心阶段,如编译、测试、打包等。
  • 清理生命周期(clean):清理生成的临时文件。
  • 站点生命周期(site):生成项目的文档站点。

2. 默认生命周期的核心阶段

阶段命令作用
validatemvn validate验证项目是否正确并所有必要信息是否完整。
compilemvn compile编译项目中的源码,将 .java 文件编译为 .class 文件(只会编译java包中的)。
testmvn test运行测试代码,确保功能正确(需要测试类和测试框架支持)。
packagemvn package将项目的编译结果打包成 JAR 或 WAR 文件,存放在 target/ 目录。把compile编译后的加上resource中的.yml等文件一起打包
verifymvn verify验证项目及其包是否符合质量标准,例如运行集成测试。
installmvn install将打包后的文件安装到本地仓库,供其他项目引用。
deploymvn deploy将最终产物发布到远程 Maven 仓库,供团队共享。

Maven 会从当前阶段开始,依次执行之前所有阶段。例如,执行 mvn package 时,validatecompiletest 都会被自动执行。


3. 打包(package)与安装(install)的区别

packageinstall 是 Maven 中常用的命令,但两者有着显著区别:

功能packageinstall
主要作用将项目打包为 JAR 或 WAR 文件将 JAR/WAR 文件安装到本地 Maven 仓库
结果文件存储位置项目目录的 target/ 文件夹本地仓库路径(如 ~/.m2/repository
典型场景开发或手动测试多模块项目或供其他项目通过 Maven 依赖引用

4. Maven 的关键命令详解

4.1 mvn compile

将项目中的 Java 源码编译为 .class 文件,并存放于 target/classes 目录中。

  • 输入src/main/java 中的源代码。
  • 输出:编译后的 .class 文件。
  • 作用范围:仅处理主代码,不会执行测试代码的编译。
4.2 mvn test

运行测试代码,确保代码功能正常。Maven 默认支持 JUnit 和 TestNG 框架。

  • 输入src/test/java 中的测试类。
  • 输出:测试结果报告。
  • 注意:测试失败将中断构建流程。
4.3 mvn package

将项目中的编译结果和resource中的文件打包成 JAR 或 WAR 文件,并存储在 target/ 目录中。

  • 特点:仅打包,不安装到本地仓库。
  • 适用场景:用于手动测试或独立部署。
4.4 mvn install

在执行 package 的基础上,将打包文件安装到本地 Maven 仓库,供其他项目引用。

  • 特点:支持多模块项目开发,是模块化项目的关键环节。
  • 适用场景:需要本地共享模块时使用。

5. Maven 本地仓库与依赖管理

Maven 本地仓库的默认路径为 ~/.m2/repository,所有依赖和安装的模块均存储于此。通过 mvn install 安装的模块会按照以下结构存储:

~/.m2/repository/
├── com/├── example/├── my-project/├── 1.0-SNAPSHOT/├── my-project-1.0-SNAPSHOT.jar├── my-project-1.0-SNAPSHOT.pom
  • 本地仓库的意义
    • 提高构建效率,避免重复下载依赖。
    • 支持多模块项目之间的共享。
    • 是远程仓库的镜像,减少对网络的依赖。

6. 总结

Maven 提供了强大的生命周期管理工具,从源码编译到模块共享的每一步都能自动化执行。理解 Maven 的阶段及其命令区别是高效开发的关键:

  1. 编译mvn compile 生成 .class 文件。
  2. 测试mvn test 保证代码质量。
  3. 打包mvn package 生成 JAR/WAR 文件。
  4. 安装mvn install 安装到本地仓库。

熟练掌握 Maven,可以极大地提升项目开发和团队协作效率。希望这篇文章能帮助你更好地理解 Maven!😊


附录:Maven 常用命令对比表

命令阶段作用
mvn clean清理阶段删除 target/ 目录和生成的临时文件。
mvn compile编译阶段编译源码,生成 .class 文件。
mvn test测试阶段运行单元测试,生成测试报告。
mvn package打包阶段打包项目为 JAR/WAR 文件。
mvn install安装阶段安装到本地仓库,供其他项目依赖。
mvn deploy部署阶段将文件发布到远程仓库。

如果还有其他 Maven 相关问题,欢迎留言讨论! 🎉

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

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

相关文章

数据结构 (3)线性表的概念及其抽象数据类型定义

一、线性表的概念 定义:线性表是指具有相同数据类型的n个数据元素的有限序列。可以表示为L(a1,a2,…,ai,…,an),其中a1是第一个元素,称为表头;an是最后一个元素,称为表尾。 特点: 有序性:线性表…

Java基础——继承和多态

目录 一、继承 继承的定义: 继承的基本用法: 如何调用父类的方法? 二、多态 多态性的好处 多态中的强制类型转换: 包的命名规则——域名倒叙 一、继承 继承的定义: 继承是面向对象编程中的一种机制&#xff0c…

播放器开发之ffmpeg 硬件解码方案

硬件编解码的概念 硬件编解码是⾮CPU通过烧写运⾏视频加速功能对⾼清视频流进⾏编解码,其中⾮CPU可包括GPU、FPGA或者 ASIC等独⽴硬件模块,把CPU⾼使⽤率的视频解码⼯作从CPU⾥分离出来,降低CPU的使⽤负荷,使得平台能 ⾼效且流畅…

计算机毕业设计SparkStreaming+Kafka旅游推荐系统 旅游景点客流量预测 旅游可视化 旅游大数据 Hive数据仓库 机器学习 深度学习

温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…

【C#】面向对象:矩形类计算周长和面积

文章目录 一、矩形类的设计与实现1.1 矩形类的属性1.2 矩形类的构造函数1.3 矩形类的方法1.4 代码实现1.4.1 运行 一、矩形类的设计与实现 题目:编写一个矩形类,私有数据成员为举行的长(Len)和宽(Wid),无参构造函数将len和wid设置为0&#x…

【PyTorch][chapter 28] 揭秘 Transformer:缩放定律指南

概括 我们介绍了 LLM 的各种缩放定律,研究了模型损失如何随着训练数据和参数数量的增加而变化。讨论包括对用于解释 LLM 缩放定律的 IsoLoss 轮廓和 IsoFLOPs 切片的解释,从而为优化计算资源提供了见解。 最后,我们讨论了 FLOP 和 FLOPS 的概…

【课堂笔记】隐私计算实训营第四期:隐私求交PSI

隐私计算实训营第四期:隐私求交PSI 安全求交集(PSI)定义PSI功能和分类最基础的PSI:Two-Party Semi-Honest PSI如何设计Two-Party Semi-Honest PSI方法1:一个基于Hash的PSI方法2:基于Diffie-Hellman密钥交换…

数据结构(基本概念及顺序表——c语言实现)

基本概念: 1、引入 程序数据结构算法 数据: 数值数据:能够直接参加运算的数据(数值,字符) 非数值数据:不能够直接参加运算的数据(字符串、图片等) 数据即是信息的载…

Springboot+Vue的项目搭建(一)

一、JDK配置环境变量 1、在官网下载jdkJava Downloads | Oracle 中国 2、下载之后双击安装。 3、配置环境变量,做法:此电脑->右键->属性->高级系统设置 然后点击确定即可 点击winr java -version 检查一下是否配置成功 二、maven包管理器…

使用 JavaScript 制作 To-Do List

使用 JavaScript 制作 To-Do List 本文记录了使用 HTML、CSS 和 JavaScript 制作一个简单的 To-Do List 网页的全过程,包含功能描述、代码实现以及优化方向。 **🎉🎉🎉欢迎来到我的博客,我是一名自学了2年半前端的大一学生,熟悉的…

esp32c3开发板通过micropython的mqtt库连MQTT物联网消息服务器

MQTT介绍 MQTT(Message Queuing Telemetry Transport)是一种轻量级的消息协议,旨在设备之间进行通信,尤其是在网络条件较差的情况下。MQTT v3.1.1 和 MQTT v5 是该协议的两个主要版本。 MQTT v3.1.1: 优点&#xff…

stm32启动过程解析startup启动文件

1.STM32的启动过程模式 1.1 根据boot引脚决定三种启动模式 复位后,在 SYSCLK 的第四个上升沿锁存 BOOT 引脚的值。BOOT0 为专用引脚,而 BOOT1 则与 GPIO 引脚共用。一旦完成对 BOOT1 的采样,相应 GPIO 引脚即进入空闲状态,可用于…

数据结构查找-哈希表(开发地址法+线性探测法)+(创建+查找+删除代码)+(C语言代码)

#include<stdlib.h> #include<stdio.h> #include<stdbool.h> #define NULLKEY -1//单元为空 #define DELKEY -2//单元内容被删除 #define M 20 typedef struct {int key;//关键字int count;//统计哈希冲突探测次数 }HashTable; //插入到哈希表 void InsertHT…

〔 MySQL 〕数据类型

目录 1.数据类型分类 2 数值类型 2.1 tinyint类型 2.2 bit类型 2.3 小数类型 2.3.1 float 2.3.2 decimal 3 字符串类型 3.1 char 3.2 varchar 3.3 char和varchar比较 4 日期和时间类型 5 enum和set mysql表中建立属性列&#xff1a; 列名称&#xff0c;类型在后 n…

数据库审计工具--Yearning 3.1.9普民的使用指南

1 页面登录 登录地址:18000 &#xff08;不要勾选LDAP&#xff09; 2 修改用户密码 3 DML/DDL工单申请及审批 工单申请 根据需要选择【DML/DDL/查询】中的一种进行工单申请 填写工单信息提交SQL检测报错修改sql语句重新进行SQL检测&#xff0c;如检测失败可以进行SQL美化后…

tcp 超时计时器

在 TCP&#xff08;传输控制协议&#xff09;中有以下四种重要的计时器&#xff1a; 重传计时器&#xff08;Retransmission Timer&#xff09; 作用&#xff1a;用于处理数据包丢失的情况。当发送方发送一个数据段后&#xff0c;就会启动重传计时器。如果在计时器超时之前没有…

前端(4)——demo分享

这两天需要用HTML、CSS和js简单组合一个html网页用于展示一些数据内容&#xff0c;这是我简单组合别人的一些文件形成的简单demo&#xff0c;大家也可以拿过去使用。 登录界面&#xff1a; 场景选择界面&#xff0c;有五个场景&#xff0c;每个场景中都需要展示一些特定的数据…

Java-空链处理

什么是 null 在 Java 中&#xff0c;null 是一个非常常见的关键字&#xff0c;用于表示“没有值”或“空”。然而&#xff0c;对于初学者来说&#xff0c;null 的本质可能会感到有些困惑。在本文中&#xff0c;我们将详细探讨 null 在 Java 中的含义和使用。 在 Java 中&…

PyTorch使用教程-深度学习框架

PyTorch使用教程-深度学习框架 1. PyTorch简介 1.1-什么是PyTorch ​ PyTorch是一个广泛使用的开源机器学习框架&#xff0c;特别适合深度学习的应用。它以其动态计算图而闻名&#xff0c;允许在运行时修改模型&#xff0c;使得实验和调试更加灵活。PyTorch提供了强大的GPU加…