一、Maven 打包方式(Packaging)简介
在 Maven 的
pom.xml
中,<packaging>
标签定义了项目最终生成的打包类型,常见的有:
pom
jar
war
每种打包方式对应不同的项目类型和部署方式,适合不同的应用场景。
二、三种打包类型的定义和区别
类型 定义 作用/用途 生成文件示例 pom 纯POM项目,没有实际代码,仅作为父项目或聚合项目。 用于管理依赖和模块聚合,做多模块项目的父项目 仅生成 pom.xml
,不生成jar或warjar Java可执行或库的标准包,包含.class文件和依赖资源。 Java应用程序或库,适合命令行程序、微服务等 生成 .jar
文件war Web应用打包格式,包含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服务器。
四、总结对比表
维度 pom jar war 是否包含代码 否 是 是 主要用途 管理依赖和聚合模块 可执行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项目
Maven--打包方式详解 (pom、war、jar)
你我约定有三2025-08-07 8:28