项目生命周期,重点是:构建、打包、发布分别是什么意思?
你听到的说法准确含义产出的东西在哪常用命令构建项目编译 + 测试 + 打包的统称项目target目录下打包项目只做“将class文件归档为JAR/WAR”这一步项目target目录下安装到本地打包后,把JAR放到本地的.m2仓库本地发布到远程打包后,把JAR上传到团队/公共的仓库服务器远程Nexus/Central仓库mvn deploy部署到服务器把WAR/JAR放到应用服务器上并启动运行中的服
这是一个很核心的问题。项目的生命周期通常包含从编写代码到上线运行的全过程。你提到的构建、打包、发布是其中的关键环节。
为了帮你理解,我用做一道菜来类比整个流程。
一、项目生命周期的主要阶段
一个标准的Java项目(特别是Maven项目)生命周期通常包含以下8个阶段:
| 阶段 | 英文术语 | 通俗解释(做菜类比) | 核心产出物 |
|---|---|---|---|
| 1. 编写代码 | Coding | 买菜、洗菜、切菜、配菜。 | .java 源文件 |
| 2. 编译 | Compile | 把切好的生食材准备好。 | .class 字节码文件 |
| 3. 测试 | Test | 尝一下菜的生熟、咸淡(单元测试)。 | 测试报告 / 发现Bug |
| 4. 打包 | Package | 把菜装进盘子里,摆盘。 | JAR / WAR 文件 |
| 5. 验证/检查 | Verify | 检查盘子有没有裂痕,摆盘是否符合标准。 | 集成测试结果 |
| 6. 安装 | Install | 把这道菜存到自家的“菜谱库”里,供自己其他时候使用。 | 本地仓库中的JAR |
| 7. 发布/部署 | Deploy / Release | 把这道菜端到餐厅的菜单上,让所有顾客(其他项目/服务器)都能享用。 | 远程仓库中的JAR / 运行在服务器上的进程 |
| 8. 运行/运维 | Run / Operate | 顾客开始吃菜,餐厅负责加菜、撤盘、处理投诉。 | 提供服务的线上系统 |
二、核心概念的详细解释
下面重点解释你提到的构建、打包、发布,以及相关的几个概念。
1. 构建 (Build) —— 最宏观的概念
定义:从原始源代码开始,经过一系列步骤(编译、测试、打包、检查等),最终生成一个可交付产物的完整过程。
- 包含内容:构建 ≠ 打包。构建是打包 + 编译 + 测试 + 检查等一系列操作的总和。
- 常用命令:
mvn clean package或mvn clean install。 - 一句话理解:把一堆
.java文件变成可以扔给服务器运行的东西。
2. 打包 (Package) —— 整理汇总
定义:将编译后的 .class 文件和项目所需的资源文件(配置文件、静态页面、图片等)按照一定格式组织成一个压缩文件(JAR、WAR、EAR等)。
- 产出物类型:
- JAR (Java Archive):普通Java应用或库。可以直接用
java -jar xxx.jar运行(如果是可执行JAR)。 - WAR (Web Archive):Web应用。需要放到Tomcat、Jetty等Web容器中运行。
- EAR (Enterprise Archive):企业级应用。包含多个WAR/JAR,放到JBoss、WebLogic等应用服务器中运行。
- JAR (Java Archive):普通Java应用或库。可以直接用
- 常用命令:
mvn package
3. 发布 (Release / Deploy) —— 分发交付
发布这个词有两个层面的意思,要根据语境区分:
-
狭义发布(Deploy - 部署):把打包好的文件(如WAR/JAR)放到目标服务器上并启动,让程序真正跑起来对外提供服务。
- 例如:把
my-app.war复制到Tomcat的webapps目录下,然后启动Tomcat。
- 例如:把
-
广义发布(Release - 发布版本):把一个稳定版本的JAR包上传到Maven远程仓库(如公司私有仓库Nexus,或中央仓库Maven Central),让其他项目可以作为依赖引用。
- 注意:这里的发布不是“运行程序”,而是“分享库文件”。
- 常用命令:
mvn deploy
4. 安装 (Install) —— 本地化存储
定义:将打包好的JAR/WAR文件复制到本地Maven仓库(~/.m2/repository)中。
- 作用:让你本机上的其他Maven项目可以通过
<dependency>引用这个项目。 - 与deploy的区别:
install是放到自己电脑的仓库里;deploy是放到团队/公共的远程仓库里。 - 常用命令:
mvn install
三、Maven生命周期的具体体现
在Maven中,生命周期是按顺序执行的。你执行后面的阶段,前面的阶段会自动执行。
例如:
- 你执行
mvn package→ Maven会自动依次执行compile→test→package。 - 你执行
mvn install→ Maven会自动依次执行compile→test→package→install。 - 你执行
mvn deploy→ Maven会自动依次执行compile→test→package→install→deploy。
Maven的三个内置生命周期(每个生命周期又包含多个阶段):
- clean生命周期:清理项目(删除target目录)。
- 阶段:
pre-clean→clean→post-clean
- 阶段:
- default生命周期:处理项目构建部署(最核心,包含上述1-7阶段)。
- 主要阶段:
compile→test→package→verify→install→deploy
- 主要阶段:
- site生命周期:生成项目报告和站点文档。
- 阶段:
pre-site→site→post-site→site-deploy
- 阶段:
四、总结对照表(让你更清晰)
| 你听到的说法 | 准确含义 | 产出的东西在哪 | 常用命令 |
|---|---|---|---|
| 构建项目 | 编译 + 测试 + 打包的统称 | 项目target目录下 | mvn clean package |
| 打包项目 | 只做“将class文件归档为JAR/WAR”这一步 | 项目target目录下 | mvn package |
| 安装到本地 | 打包后,把JAR放到本地的.m2仓库 |
本地 .m2/repository |
mvn install |
| 发布到远程 | 打包后,把JAR上传到团队/公共的仓库服务器 | 远程Nexus/Central仓库 | mvn deploy |
| 部署到服务器 | 把WAR/JAR放到应用服务器上并启动 | 运行中的服务器进程 | (通常用Jenkins、脚本手动操作) |
最后提醒:如果你的项目是一个最终运行的应用(比如一个网站后端),通常执行 mvn package 得到WAR/JAR,然后手动或通过脚本把它传到服务器上运行。mvn deploy 更多是用来发布供其他项目使用的公共库(比如你写了一个工具类库)。
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐

所有评论(0)