这是一个很核心的问题。项目的生命周期通常包含从编写代码上线运行的全过程。你提到的构建、打包、发布是其中的关键环节。

为了帮你理解,我用做一道菜来类比整个流程。

一、项目生命周期的主要阶段

一个标准的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 packagemvn 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等应用服务器中运行。
  • 常用命令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会自动依次执行 compiletestpackage
  • 你执行 mvn install → Maven会自动依次执行 compiletestpackageinstall
  • 你执行 mvn deploy → Maven会自动依次执行 compiletestpackageinstalldeploy

Maven的三个内置生命周期(每个生命周期又包含多个阶段):

  1. clean生命周期:清理项目(删除target目录)。
    • 阶段:pre-cleancleanpost-clean
  2. default生命周期:处理项目构建部署(最核心,包含上述1-7阶段)。
    • 主要阶段:compiletestpackageverifyinstalldeploy
  3. site生命周期:生成项目报告和站点文档。
    • 阶段:pre-sitesitepost-sitesite-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 更多是用来发布供其他项目使用的公共库(比如你写了一个工具类库)。

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐