EAR、WAR 和 JAR:Java 中的文件格式
发布: (2025年12月29日 GMT+8 03:58)
5 min read
原文: Dev.to
Source: Dev.to

Source: …
这些格式是什么?
JAR(Java Archive)
JAR 是 Java 中最基本、最核心的格式。它代表 Java Archive,本质上是一个 ZIP 压缩文件,里面包含已编译的类、库以及 Java 应用程序的资源。
主要特性
- 包含
.class编译文件 - 包含可复用的库
- 可以包含
META-INF/MANIFEST.MF文件,用于定义应用程序的配置 - 用于 standalone(独立)应用(桌面或命令行)
- 如果在清单中定义了
main()方法,可直接运行
典型结构
minha-aplicacao.jar
├── com/
│ └── exemplo/
│ ├── Principal.class
│ └── Utilitario.class
├── recursos/
│ └── config.properties
└── META-INF/
└── MANIFEST.MF
使用示例
java -jar minha-aplicacao.jar
WAR(Web Archive)
WAR 代表 Web Archive,是一种专用于 Java Web 应用的格式。它设计用于部署在 Tomcat、JBoss 或 GlassFish 等 Web 应用服务器上。
主要特性
- 包含 servlet、JSP 和 Web 控制器
- 包含 Web 应用特有的目录结构
- 包含
WEB-INF/web.xml(部署描述符) - 存放静态资源(HTML、CSS、JavaScript、图片)
- 包含 Web 应用所需的库(JAR)
- 部署在应用服务器上,而不是直接运行
典型结构
minha-aplicacao-web.war
├── index.html
├── css/
│ └── estilo.css
├── js/
│ └── script.js
├── WEB-INF/
│ ├── web.xml
│ ├── classes/
│ │ └── com/exemplo/servlets/MeuServlet.class
│ └── lib/
│ ├── spring-core.jar
│ └── hibernate.jar
└── META-INF/
└── MANIFEST.MF
部署示例
将 WAR 文件复制到 Tomcat(或等效服务器)的 webapps 目录,服务器会自动解压并运行该应用。
EAR(Enterprise Archive)
EAR 代表 Enterprise Archive,是这三者中最复杂的格式。它面向企业级应用,可包含多个模块(Web、EJB、共享库等)。
主要特性
- 包含多个模块(WAR、业务 JAR 等)
- 包含
META-INF/application.xml,用于定义应用结构 - 允许在多个模块之间共享公共库
- 部署在企业级应用服务器(JBoss、WebSphere、GlassFish 等)上
- 有助于组织包含多层结构的复杂应用
典型结构
minha-aplicacao-enterprise.ear
├── minha-web.war
├── minha-logica-negocio.jar
├── minha-integracao.jar
├── lib/
│ ├── commons-lang.jar
│ └── log4j.jar
└── META-INF/
├── application.xml
└── MANIFEST.MF
实际比较
| 方面 | JAR | WAR | EAR |
|---|---|---|---|
| 目的 | 独立应用、库 | Web 应用 | 企业应用 |
| 执行方式 | 直接:java -jar … | 通过 Web 服务器 | 通过企业服务器 |
| 配置文件 | MANIFEST.MF | WEB-INF/web.xml | META-INF/application.xml |
| 静态资源 | 可选 | 必需(HTML、CSS 等) | 位于模块(WAR)内部 |
| 模块 | 单一模块 | 单一模块 | 多模块 |
| 所需服务器 | 无 | Tomcat、Jetty 等 | JBoss、WebSphere、GlassFish 等 |
| 典型使用 | API、CLI 工具 | 门户、Web 系统 | 银行系统、ERP 等 |
编译和打包过程
无论何种类型的构件,整体流程如下:
- 编译 – Java 编译器将
.java文件转换为.class。 - 打包 – Maven 或 Gradle 等工具将这些文件聚合为适当的格式(JAR、WAR 或 EAR)。
- 分发 – 生成的构件被交付用于运行或部署。
使用 Maven 的示例 (pom.xml)
jar
war
ear
实际示例
场景 1 – 桌面应用
打包为 JAR 的图像处理工具:
mvn clean package
# Gera: imagem-processor-1.0.jar
java -jar imagem-processor-1.0.jar
场景 2 – 动态网站
打包为 WAR 的博客或电子商务:
mvn clean package
# Gera: meu-blog-1.0.war
# Copiado para: /tomcat/webapps/
# Acesso: http://localhost:8080/meu-blog
场景 3 – 复杂系统
打包为 EAR 的多服务银行系统:
mvn clean package
# Gera: banco-sistema-1.0.ear
# Implantado em: JBoss Application Server
结论
在 JAR、WAR 和 EAR 之间的选择取决于您正在开发的应用类型:
- JAR – 多用途,适合库和独立运行的应用程序。
- WAR – 专用于在 servlet 服务器上运行的 Web 应用程序。
- EAR – 面向需要多个模块和高级管理功能的企业解决方案。
了解这些差异有助于更好地组织项目,选择正确的工具,并确保更高效的部署。
WAR é para aplicações web, enquanto EAR é para arquiteturas empresariais complexas. Compreender essas diferenças é essencial para qualquer desenvolvedor Java, pois garante que sua aplicação seja empacotada e implantada corretamente.