DEV Community

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

Posted on

EAR, WAR e JAR: Formatos de Arquivo em Java

Quando desenvolvemos aplicações Java, especialmente projetos maiores e mais complexos, nos deparamos com diferentes formatos de empacotamento. Os três principais são JAR, WAR e EAR. Embora todos sejam baseados no formato ZIP, cada um tem um propósito específico e uma estrutura diferente. Este artigo explora essas diferenças de forma prática.

O que são esses formatos?

JAR (Java Archive)

O JAR é o formato mais básico e fundamental em Java. Significa "Java Archive" e é essencialmente um arquivo compactado no formato ZIP que contém classes compiladas, bibliotecas e recursos de uma aplicação Java.

Características principais:

  • Contém arquivos .class compilados
  • Inclui bibliotecas reutilizáveis
  • Pode conter um arquivo META-INF/MANIFEST.MF que define configurações da aplicação
  • É usado para aplicações standalone (aplicações de desktop ou linha de comando)
  • Pode ser executado diretamente se contiver um método main() definido no manifesto

Estrutura típica:

minha-aplicacao.jar
├── com/
│   └── exemplo/
│       ├── Principal.class
│       └── Utilitario.class
├── recuros/
│   └── config.properties
└── META-INF/
    └── MANIFEST.MF
Enter fullscreen mode Exit fullscreen mode

Exemplo de uso:

java -jar minha-aplicacao.jar
Enter fullscreen mode Exit fullscreen mode

WAR (Web Archive)

WAR significa "Web Archive" e é um formato especializado para aplicações web Java. É especificamente projetado para ser implantado em servidores de aplicação web como Tomcat, JBoss ou GlassFish.

Características principais:

  • Contém servlets, JSPs e controladores web
  • Inclui a estrutura de diretórios específica para aplicações web
  • Contém o arquivo WEB-INF/web.xml (descritor de implantação)
  • Armazena recursos estáticos (HTML, CSS, JavaScript, imagens)
  • Inclui bibliotecas (JARs) necessárias para a aplicação web
  • É implantado em um servidor de aplicação, não executado diretamente

Estrutura típica:

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
Enter fullscreen mode Exit fullscreen mode

Exemplo de implantação:

Você copia o arquivo WAR em uma pasta específica do Tomcat e ele é automaticamente descompactado e executado pelo servidor.

EAR (Enterprise Archive)

EAR significa "Enterprise Archive" e é o formato mais complexo dos três. É projetado para aplicações empresariais que podem conter múltiplos módulos (web, ejb, bibliotecas compartilhadas).

Características principais:

  • Contém múltiplos módulos (WARs, JARs de negócio, etc)
  • Inclui o arquivo META-INF/application.xml que define a estrutura da aplicação
  • Permite compartilhar bibliotecas comuns entre múltiplos módulos
  • É implantado em servidores de aplicação empresariais (JBoss, WebSphere, GlassFish)
  • Facilita a organização de aplicações complexas com múltiplas camadas

Estrutura típica:

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
Enter fullscreen mode Exit fullscreen mode

Comparação Prática

Aspecto JAR WAR EAR
Propósito Aplicações standalone, bibliotecas Aplicações web Aplicações empresariais
Execução Direto: java -jar Via servidor web Via servidor empresarial
Arquivo de configuração MANIFEST.MF web.xml application.xml
Recurso estáticos Opcional Esperado (HTML, CSS) Dentro dos módulos
Módulos Um único módulo Um módulo Múltiplos módulos
Servidor necessário Nenhum Tomcat, Jetty JBoss, WebSphere
Uso típico API, CLI tools Portais, Sistemas web Sistemas bancários, ERP

Processo de Compilação e Empacotamento

Ao compilar um projeto Java, independentemente do tipo, o processo é semelhante:

  1. Compilação: O compilador Java converte arquivos .java em .class
  2. Empacotamento: Ferramentas como Maven ou Gradle agrupam esses arquivos no formato apropriado (JAR, WAR ou EAR)
  3. Distribuição: O arquivo resultante é entregue para execução ou implantação

Com Maven, por exemplo, você define no pom.xml:

<!-- Para JAR -->
<packaging>jar</packaging>

<!-- Para WAR -->
<packaging>war</packaging>

<!-- Para EAR -->
<packaging>ear</packaging>
Enter fullscreen mode Exit fullscreen mode

Exemplos Práticos

Cenário 1: Aplicação de Desktop

Uma ferramenta de processamento de imagens seria empacotada como JAR.

mvn clean package
# Gera: imagem-processor-1.0.jar
java -jar imagem-processor-1.0.jar
Enter fullscreen mode Exit fullscreen mode

Cenário 2: Site Dinâmico

Um blog ou e-commerce seria empacotado como WAR.

mvn clean package
# Gera: meu-blog-1.0.war
# Copiado para: /tomcat/webapps/
# Acesso: http://localhost:8080/meu-blog
Enter fullscreen mode Exit fullscreen mode

Cenário 3: Sistema Complexo

Um sistema bancário com múltiplos serviços seria empacotado como EAR.

mvn clean package
# Gera: banco-sistema-1.0.ear
# Implantado em: JBoss Application Server
Enter fullscreen mode Exit fullscreen mode

Conclusão

A escolha entre JAR, WAR e EAR depende do tipo de aplicação que você está desenvolvendo. JAR é versátil e fundamental, WAR é especializado para web, e 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.

Top comments (0)