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

Maven--打包方式详解 (pom、war、jar)

一、Maven 打包方式(Packaging)简介

在 Maven 的 pom.xml 中,<packaging> 标签定义了项目最终生成的打包类型,常见的有:

  • pom

  • jar

  • war

每种打包方式对应不同的项目类型和部署方式,适合不同的应用场景。


二、三种打包类型的定义和区别

类型定义作用/用途生成文件示例
pom纯POM项目,没有实际代码,仅作为父项目或聚合项目。用于管理依赖和模块聚合,做多模块项目的父项目仅生成 pom.xml,不生成jar或war
jarJava可执行或库的标准包,包含.class文件和依赖资源。Java应用程序或库,适合命令行程序、微服务等生成 .jar 文件
warWeb应用打包格式,包含Web资源(JSP、HTML、WEB-INF等)用于部署到Servlet容器(如Tomcat、Jetty)生成 .war 文件

三、详细说明与特点

1. pom 包

  • 特点

    • 不包含任何编译代码。

    • 主要用于管理项目依赖版本、插件版本。

    • 通常作为多模块项目的父模块。

    • 方便统一管理多个子模块。

  • 典型场景

    • 大型项目拆分成多个子模块(比如:service、web、dao、common等),父模块使用pom类型。

  • 示例

<packaging>pom</packaging>
  • 使用场景示例

某公司有一个大型系统,拆分为多个模块:

  • project-parent(pom包,管理依赖和插件版本)

  • project-service(jar包,业务逻辑)

  • project-web(war包,前端Web应用)

project-parent中定义所有公共依赖版本,子模块继承。


2. jar 包

  • 特点

    • Java标准的可执行或库包。

    • 包含.class字节码文件和资源文件。

    • 适合独立运行的Java程序或者Java库。

    • 可作为其他项目的依赖。

  • 典型场景

    • 后端微服务项目,Spring Boot项目默认打包成jar。

    • 工具类库、通用组件、公共API库。

  • 示例

<packaging>jar</packaging>
  • 使用场景示例

一个基于Spring Boot的REST服务,打包成jar,直接用java -jar app.jar启动。


3. war 包

  • 特点

    • Web应用专用打包格式。

    • 包含Web资源(HTML、JSP、JS、CSS、WEB-INF目录等)。

    • 需要部署到Servlet容器中(如Tomcat、Jetty、WildFly)。

    • 传统Java Web项目使用war包。

  • 典型场景

    • 传统Java EE Web项目。

    • 需要部署到外部应用服务器的Web应用。

    • Spring MVC、JSP、Servlet等Web项目。

  • 示例

<packaging>war</packaging>
  • 使用场景示例

一个基于Spring MVC的Web项目,生成war包后部署到Tomcat服务器。


四、总结对比表

维度pomjarwar
是否包含代码
主要用途管理依赖和聚合模块可执行Java程序或类库Java Web应用
生成文件pom.xml.jar.war
部署方式无需部署直接运行或依赖部署到Servlet容器(Tomcat等)
适合项目类型多模块父项目微服务、工具库传统Web应用
是否包含Web资源

五、额外说明

  • Spring Boot 项目
    默认打包为jar,自带内嵌Tomcat,直接可执行。
    也可以配置为war,部署到外部Tomcat,但需做一些额外配置。

  • 多模块项目中的pom
    方便统一管理依赖版本,子模块可以是jar或war。


六、实际应用场景举例

项目类型打包方式说明
工具类库jar只包含Java代码和资源,供其他项目引用
单体Web应用war传统Servlet容器部署,包含JSP、静态资源等
Spring Boot微服务jar自带内嵌容器,独立启动,微服务架构典型选择
多模块项目管理pom父项目统一管理多个模块依赖和版本,子模块可为jar或war

七、总结

关键点建议
你只需管理依赖和聚合模块时,选pom作为多模块项目的父POM
你开发的是普通Java程序或库时,选jar包含.class文件,可运行或依赖使用
你开发的是Web应用时,选war需要部署到外部Web容器的Java Web项目
http://www.dtcms.com/a/318047.html

相关文章:

  • 各类排序算法
  • FastAPI(未结束)
  • 【React 插件】@uiw/react-md-editor 使用教程:从基础使用到自定义扩展
  • STM32串口通信指南
  • 基于RPR模型的机械臂手写器simulink建模与仿真
  • easyExcel 读取有合并单元格数据
  • 对接钉钉审批过程记录(C#版本)
  • 高可用改造之构建​​双活冗余的TDengine时序数据处理架构
  • 通过最严时序标准,再登产业图谱榜首,TDengine 时序数据库在可信数据库大会荣获双荣誉
  • AI 软件工程开发 AI 算法 架构与业务
  • Effective C++ 条款25:考虑写出一个不抛异常的swap函数
  • linux 使用docker时开放的端口不受防火墙控制的解决方案
  • 医疗AI中GPU部署的“非对等全节点架构“方案分析(上)
  • AI领域的三箭齐发之夜 - genie3,gpt-oss, Opus 4.1
  • hyper-v常见问题解答(此文会持续更新)
  • DNS 服务器
  • 远程连接----ubuntu ,rocky 等Linux系统,WindTerm_2.7.0
  • 当前主流GPU全景讲解:架构、功能与应用方向
  • 一种简单的3dnr去噪算法介绍
  • 北京-4年功能测试2年空窗-报培训班学测开-第六十九天-投简历第一天-从兴奋到害怕
  • Unity工具—Inspector面板增加Rect Transform组件上下左右移动的工具
  • linux IO介绍
  • Android系统性能分析利器:深入解析Tracing框架
  • Dify+Nginx反向代理:80端口冲突的优雅解决方案
  • ICCV 2025 | 视频生成迈入“多段一致”新时代!TokensGen用“压缩Token”玩转长视频生成
  • Mysql如何迁移数据库数据
  • mysql数据库基础操作
  • 每日任务day0806:小小勇者成长记之收获日
  • 在 Visual Studio Code 中免费使用 Gemini 2.5 Pro API
  • 滴滴招java开发