Arquivo .war vs .ear

566

Qual é a diferença entre um arquivo .war e .ear?

ria
fonte
2
Para entender mais sobre .JAR, .WAR and .EARVocê também pode ver um vídeo tutorial. É muito simples ou mais compreensível. Ele irá explicar qual é a diferença entre .JAR, .WAR e .EAR Video Tutorial : Diferença entre .JAR, .WAR e .EAR
Bharti Rawat
2
Bem-vindo ao mundo Java, onde alguém pensou que deixar um arquivo zip com a extensão .zip não é suficiente para a empresa e, portanto, deve ser renomeado para .jar / .ear ou .war com base no local em que você o está movendo.
Pistacchio

Respostas:

492

Do GeekInterview :

No aplicativo J2EE, os módulos são empacotados como EAR, JAR e WAR com base em sua funcionalidade

JAR: Os módulos EJB que contêm java beans corporativos (arquivos de classe) e o descritor de implementação EJB são compactados como arquivos JAR com extensão .jar

WAR: Módulos da Web que contêm arquivos de classe Servlet, arquivos JSP, arquivos de suporte, arquivos GIF e HTML são empacotados como um arquivo JAR com extensão .war (arquivo da web)

EAR: Todos os arquivos acima (.jar e .war) são compactados como um arquivo JAR com extensão .ear (arquivo corporativo) e implementados no Application Server.

elhoim
fonte
63
Essas postagens me fazem pensar que o EAR é apenas JARS e WARS juntos em um grande EAR, o que eu acho que não é tão simples.
Lay González
4
Tudo em essência é Archive (JAR), mas com extensão diferente para implicar sua natureza / conteúdo.
KNU
1
EARs e JARs separados para beans são desnecessários na maioria dos casos. Um WAR simples com todas as classes em um arquivo é normal. Aqui está uma explicação mais elaborada: adam-bien.com/roller/abien/entry/ears_wars_and_size_matters
Kaspars Rinkevics
599

Um WAR (Web Archive) é um módulo que é carregado em um contêiner da Web de um Java Application Server . Um Java Application Server possui dois contêineres (ambientes de tempo de execução) - um é um contêiner da Web e o outro é um contêiner EJB.

O contêiner da Web hospeda aplicativos da Web com base no JSP ou na API Servlets - projetada especificamente para o processamento de solicitações da Web - para um estilo de solicitação / resposta da computação distribuída . Um contêiner da Web requer que o módulo da Web seja empacotado como um arquivo WAR - que é um arquivo JAR especial com um web.xmlarquivo na WEB-INFpasta

Um contêiner EJB hospeda java beans corporativos com base na API EJB projetada para fornecer funcionalidade comercial estendida, como transações declarativas, segurança no nível do método declarativo e suporte a multiprotocolo - para um estilo RPC de computação distribuída . Os contêineres EJB exigem que os módulos EJB sejam compactados como arquivos JAR - eles têm um ejb-jar.xmlarquivo na META-INFpasta

Os aplicativos corporativos podem consistir em um ou mais módulos que podem ser módulos da Web (compactados como um arquivo WAR), módulos EJB (compactados como um arquivo JAR) ou ambos. Os aplicativos corporativos são compactados como arquivos EAR - esses são arquivos JAR especiais que contêm um application.xmlarquivo na META-INFpasta.

Basicamente, os arquivos EAR são um superconjunto que contém arquivos WAR e arquivos JAR . Os Java Application Servers permitem a implementação de módulos da web independentes em um arquivo WAR, embora internamente eles criem arquivos EAR como um wrapper em torno dos arquivos WAR. Contêineres da web independentes, como Tomcat e Jetty , não suportam arquivos EAR - esses não são servidores de aplicativos completos. Os aplicativos da Web nesses contêineres devem ser implementados apenas como arquivos WAR.

Nos servidores de aplicativos, os arquivos EAR contêm configurações como mapeamento de função de segurança do aplicativo, mapeamento de referência EJB e mapeamento de URL da raiz de contexto dos módulos da web.

Além dos módulos da Web e EJB, os arquivos EAR também podem conter módulos conectores empacotados como arquivos RAR e módulos clientes empacotados como arquivos JAR.

Rutesh Makhijani
fonte
32
+1 porque esta resposta descreve por que você pode querer usar uma ou outra.
Jason Wheeler
7
@KNU sim, .jar, .ware .eararquivos são arquivos zip simples, portanto, capaz de ser aberto por qualquer programa que pode lidar com arquivos .zip comuns.
acdcjunior
41

guerra - arquivo da web. É usado para implantar aplicativos da web de acordo com o padrão de servlet. É um arquivo jar que contém um diretório especial chamado WEB-INF e vários arquivos e diretórios dentro dele (web.xml, lib, classes), além de todo o HTML, JSP, imagens, CSS, JavaScript e outros recursos do aplicativo Web.

arquivo corporativo auricular. É usado para implantar aplicativos corporativos contendo EJBs, aplicativos da web e bibliotecas de terceiros. Também é um arquivo jar, possui um diretório especial chamado APP-INF que contém o arquivo application.xml e contém arquivos jar e war.

David Rabinowitz
fonte
você quis dizer META-INF em vez do diretório APP-INF?
Zavael
26

Os arquivos WAR (archive da web) contêm arquivos de classe de servlet, JSPs (páginas de servlet Java), arquivos gráficos e HTML e outros arquivos de suporte.

Os arquivos EAR (archive corporativo) contêm os arquivos WAR junto com os arquivos JAR que contêm o código.

Pode haver outras coisas nesses arquivos, mas elas basicamente se destinam ao que elas significam: WAR para coisas do tipo Web, EAR para coisas do tipo Enterprise (WARs, código, conectores etc.).

paxdiablo
fonte
2
No meu caso, eu sempre implanto o WAR com jars na pasta WEB-INF / lib e isso funciona. Então, por que devo usar o arquivo EAR?
swapyonubuntu
2
@swapyonubuntu, se você está apenas implantando um único aplicativo Web (mais especificamente, um único contexto de servlet), não há nada de errado em apenas fazer arquivos WAR. Os arquivos EAR são muito melhores para aplicativos empresariais completos, incluindo aqueles com muitos aplicativos da web.
21415
1
Nesta era de microsserviços, não faria mais sentido manter cada WAR completamente separado e implantar separadamente em vez de agrupá-los em um EAR monolítico?
Sayo Oladeji
18

Arquivos JAR

Um arquivo JAR (abreviação de Java Archive) permite a combinação de vários arquivos em um único. Arquivos com o '.jar'; A extensão é utilizada pelos desenvolvedores de software para distribuir classes Java e vários metadados. Eles também contêm bibliotecas e arquivos de recursos, bem como arquivos de acessórios (como arquivos de propriedades).

Os usuários podem extrair e criar arquivos JAR com o comando '.jar' do Java Development Kit (JDK). Ferramentas ZIP também podem ser usadas.

Os arquivos JAR possuem arquivos de manifesto opcionais. As entradas no arquivo de manifesto prescrevem o uso do arquivo JAR. Uma especificação de classe 'principal' para uma classe de arquivo indica o arquivo como um programa desanexado ou 'independente'.

Arquivos WAR

Os arquivos WAR (ou archive de aplicativos da Web) podem incluir arquivos XML (linguagem de marcação extensível), classes Java e páginas do servidor Java para fins de aplicativos da Internet. Também é empregado para marcar bibliotecas e páginas da Web que compõem um aplicativo da Web. Os arquivos com a extensão '.war' contêm o aplicativo Web para uso com contêineres de servidor ou JSP (Java Server Page). Possui JSP, HTML (Hypertext Markup Language), JavaScript e vários arquivos para criar os aplicativos da Web mencionados acima.

Um arquivo WAR é estruturado como tal para permitir diretórios e arquivos especiais. Também pode ter uma assinatura digital (semelhante à de um arquivo JAR) para mostrar a veracidade do código.

Arquivos EAR

Um arquivo EAR (Enterprise Archive) mescla arquivos JAR e WAR em um único archive. Esses arquivos com a extensão '.ear' têm um diretório para metadados. Os módulos são empacotados no arquivo morto para operação suave e simultânea dos diferentes módulos em um servidor de aplicativos.

O arquivo EAR também possui descritores de implementação (que são arquivos XML) que ditam efetivamente a implementação dos diferentes módulos.

insira a descrição da imagem aqui

Joby Wilson Mathews
fonte
1
deve ser a melhor resposta apenas pelo excelente gráfico, obrigado, ótima ajuda!
fl0w
12

Consulte: http://www.wellho.net/mouth/754_tar-jar-war-ear-sar-files.html

tar (arquivos de fita) - O formato usado é o arquivo gravado em unidades seriais de fileName, fileSize, fileData - sem compactação. pode ser enorme

Jar (arquivo java) - técnicas de compactação usadas - geralmente contém informações sobre java, como arquivos de classe / java. Mas pode conter qualquer arquivo e estrutura de diretórios

war (arquivos de aplicativos da web) - semelhantes aos arquivos jar, possuem apenas uma estrutura de diretórios específica, conforme a especificação JSP / Servlet para fins de implementação

ear (arquivos corporativos) - semelhante aos arquivos jar. possui uma estrutura de diretórios que segue os requisitos do J2EE para que possa ser implementada nos servidores de aplicativos J2EE. - pode conter vários arquivos JAR e WAR

simpleDev
fonte
6

Os arquivos Ear fornecem mais opções para configurar a interação com o servidor de aplicativos.

Por exemplo: se a versão de hibernação do servidor de aplicativos for mais antiga que a fornecida por suas dependências, você poderá adicionar o seguinte ao ear-deployer-jboss-beans.xml para que o JBOSS isole os carregadores de classes e evite conflitos:

<bean name="EARClassLoaderDeployer" class="org.jboss.deployment.EarClassLoaderDeployer">    
  <property name="isolated">true</property>
</bean>

ou para src / main / application / META-INF / jboss-app.xml:

<?xml version="1.0"?>
<jboss-app>
<loader-repository>
    loader=nameofyourear.ear
<loader-repository-config>java2ParentDelegation=false</loader-repository-config>
</loader-repository>
</jboss-app> 

Isso garantirá que não haja conflito do carregador de classes entre seu aplicativo e o servidor de aplicativos.

Normalmente, o mecanismo do carregador de classes funciona assim:

Quando uma solicitação de carregamento de classe é apresentada a um carregador de classes, ele primeiro pede ao carregador de classes pai que atenda à solicitação. O pai, por sua vez, pede a classe pai até que a solicitação chegue ao topo da hierarquia. Se o carregador de classes na parte superior da hierarquia não puder atender à solicitação, o carregador de classes filho que o chamou será responsável por carregar a classe.

Ao isolar os carregadores de classes, o seu auricular não procurará no pai (= JBoss / outro AS classloader). Até onde eu sei, isso não é possível com arquivos de guerra.

Marca
fonte
KNU: Esse uso de um arquivo ear é mais válido do que apenas usá-lo porque "ele contém arquivos de classe Servlet, arquivos JSP, arquivos de suporte, arquivos GIF e HTML", conforme indicado na resposta aceita. Como os arquivos de guerra também podem conter gif, html, jsp, servlets, ... Se todos "responderem de acordo com sua força", talvez todos possamos nos tornar mais sábios sobre o assunto em questão.
Mark
Maven faz isso por você, não? Você pode especificar dependências por versão e elas serão incluídas na pasta / lib. (em um arquivo de guerra)
Sebas
Sim, mas o contêiner do servidor de aplicativos / servlet pode optar por substituí-los na pasta lib pelas libs que ele fornece em sua própria pasta lib. Isso pode impedir isso. Tudo depende do mecanismo de carregamento de classe usado.
Mark
6

O J2EE define três tipos de arquivos:

  1. Java Archives (JAR) Um arquivo JAR encapsula uma ou mais classes Java, um manifesto e um descritor. Os arquivos JAR são o nível mais baixo de arquivamento. Os arquivos JAR são usados ​​no J2EE para empacotar EJBs e aplicativos Java do lado do cliente.

  2. Os arquivos WAR dos Arquivos da Web (WAR) são semelhantes aos arquivos JAR, exceto que são especificamente para aplicativos da Web criados a partir de Servlets, JSPs e classes de suporte.

  3. Enterprise Archives (EAR) ”Um arquivo EAR contém todos os componentes que compõem um aplicativo J2EE específico.

user1884500
fonte
0

Para facilitar o transporte do projeto, a implantação ficou fácil. precisa compactado em um arquivo. Grupo JAR (arquivo java) de arquivos .class

WAR (arquivo da web) - cada guerra representa um aplicativo da web - use apenas tecnologias relacionadas à web, como servlet, jsps podem ser usados. - pode ser executado no servidor Tomcat - aplicativo da web desenvolvido apenas por tecnologias relacionadas à web jsp servlet html js - representação de informações apenas sem transações.

EAR (arquivo corporativo) - cada orelha representa um aplicativo corporativo - podemos usar qualquer coisa do j2ee como o ejb, o jms pode ser usado com alegria. - pode ser executado no Glassfish como um servidor e não no servidor Tomcat. - aplicativo corporativo desenvolvido por qualquer tecnologia, como j2ee, como todos os aplicativos da web mais ejbs jms etc. - faz transações com representação de informações. por exemplo. Aplicativo do banco, aplicativo de telecomunicações

Ashish Kamble
fonte