EAR、WAR 和 JAR:Java 中的文件格式

发布: (2025年12月29日 GMT+8 03:58)
5 min read
原文: Dev.to

Source: Dev.to

Cover image for EAR, WAR e JAR: Formatos de Arquivo em Java

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

实际比较

方面JARWAREAR
目的独立应用、库Web 应用企业应用
执行方式直接:java -jar …通过 Web 服务器通过企业服务器
配置文件MANIFEST.MFWEB-INF/web.xmlMETA-INF/application.xml
静态资源可选必需(HTML、CSS 等)位于模块(WAR)内部
模块单一模块单一模块多模块
所需服务器Tomcat、Jetty 等JBoss、WebSphere、GlassFish 等
典型使用API、CLI 工具门户、Web 系统银行系统、ERP 等

编译和打包过程

无论何种类型的构件,整体流程如下:

  1. 编译 – Java 编译器将 .java 文件转换为 .class
  2. 打包 – Maven 或 Gradle 等工具将这些文件聚合为适当的格式(JAR、WAR 或 EAR)。
  3. 分发 – 生成的构件被交付用于运行或部署。

使用 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

结论

JARWAREAR 之间的选择取决于您正在开发的应用类型:

  • 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.
Back to Blog

相关文章

阅读更多 »

Maven 的内部

介绍 今天我浪费了两小时的宝贵时间。就是这样。 这一切都是因为 Maven https://maven.apache.org/,在我看来,它很奇特。 一切都与……有关

二进制

2 GiB “Relocation Barrier” – 为什么大规模二进制在 x86‑64 上会崩溃 我在攻读 PhD 并提交学术文章时遇到的一个问题是…