.war和.ear文件


566

.war和.ear文件有什么区别?


2
要了解更多有关.JAR, .WAR and .EAR您的信息,您还可以观看视频教程。这非常简单或更容易理解。它将说明.JAR,.WAR.EAR之间的区别是什么视频教程.JAR,.WAR和.EAR之间的区别
Bharti Rawat

2
欢迎来到Java世界,在那里有人认为留下带有.zip扩展名的zip文件还不够企业,因此必须根据最终移动的位置将其重命名为.jar / .ear或.war。
pistacchio

Answers:


492

来自GeekInterview

在J2EE应用程序中,模块根据其功能打包为EAR,JAR和WAR。

JAR:包含企业Java Bean(类文件)和EJB部署描述符的EJB模块打包为具有.jar扩展名的JAR文件。

WAR:包含Servlet类文件,JSP文件,支持文件,GIF和HTML文件的Web模块打包为具有.war(网络档案)扩展名的JAR文件。

EAR:以上所有文件(.jar和.war)都打包为扩展名为.ear(企业归档)的JAR文件,并部署到Application Server中。


63
这篇文章使我认为EAR在大型EAR中既是JARS又是WARS,我认为这并不那么简单。
LayGonzález2014年

4
本质上所有内容都是Archive(JAR),但具有不同的扩展来暗示其性质/内容。
KNU 2014年

1
在大多数情况下,不需要EAR和bean的单独JAR。在一个存档中包含所有类的简单WAR是正常的。这里有一个更详尽的解释:adam-bien.com/roller/abien/entry/ears_wars_and_size_matters
Kaspars Rinkevics

599

一个WAR(Web归档)是被加载到一个模块Web容器 A的Java应用服务器。Java Application Server具有两个容器(运行时环境)-一个是Web容器,另一个是EJB容器。

Web容器承载基于JSP或Servlets API的Web应用程序- 这些Web应用程序是专门为Web请求处理而设计的-因此,它具有分布式计算请求/响应样式。Web容器要求将Web模块打包为WAR文件 -这是一个特殊的JAR文件,web.xml文件WEB-INF夹中有一个文件。

一个EJB容器基于EJB的API旨在提供扩展的业务功能,如声明式事务,声明方法级别的安全性和多协议支持主机企业Java Beans -这样的更多的RPC风格的分布式计算。EJB容器要求将EJB模块打包为JAR文件 -这些ejb-jar.xml文件在META-INF文件夹中有一个文件。

企业应用程序可以包含一个或多个模块,这些模块可以是Web模块(打包成WAR文件),EJB模块(打包成JAR文件)或它们两者。企业应用程序打包为EAR文件 -这些是特殊的JAR application.xml文件,在META-INF文件夹中包含一个文件。

基本上,EAR文件是包含WAR文件JAR文件的超集。Java Application Server允许在WAR文件中部署独立的Web模块,尽管在内部,它们创建EAR文件作为WAR文件的包装。诸如TomcatJetty之类的独立Web容器不支持EAR文件-这些不是成熟的Application Server。这些容器中的Web应用程序仅应作为WAR文件进行部署。

在应用程序服务器中,EAR文件包含诸如Web模块的应用程序安全角色映射,EJB参考映射和上下文根URL映射之类的配置。

除了Web模块和EJB模块之外,EAR文件还可以包含打包为RAR文件的连接器模块和打包为JAR文件的客户端模块。


32
+1,因为此答案描述了您为什么要使用一个或另一个。
杰森·惠勒2014年

7
@KNU是,.jar.war.ear文件是简单的ZIP压缩文件,因此能够通过,可以处理普通.zip文件的任何程序中打开。
acdcjunior

41

战争-网络存档。它用于根据Servlet标准部署Web应用程序。它是一个jar文件,其中包含一个名为WEB-INF的特殊目录,并且其中包含几个文件和目录(web.xml,lib,类)以及该Web应用程序的所有HTML,JSP,图像,CSS,JavaScript和其他资源

耳朵-企业档案。它用于部署包含EJB,Web应用程序和第3方库的企业应用程序。它也是一个jar文件,它有一个名为APP-INF的特殊目录,其中包含application.xml文件,并且包含jar和war文件。


您的意思是META-INF而不是APP-INF目录吗?
Zavael

26

WAR(网络归档)文件包含Servlet类文件,JSP(Java Servlet页面),HTML和图形文件以及其他支持文件。

EAR(企业归档)文件包含WAR文件以及包含代码的JAR文件。

这些文件中可能还有其他内容,但是它们的基本含义是听起来像什么:WAR用于Web类型的东西,EAR用于企业类型的东西(WAR,代码,连接器等)。


2
就我而言,我总是在WEB-INF / lib文件夹中部署带有jar的WAR,并且可以正常工作。那为什么要使用EAR归档文件呢?
swapyonubuntu 2015年

2
@swapyonubuntu,如果您只是部署单个Web应用程序(更具体地说,是单个servlet上下文),则仅执行WAR文件就没有问题。EAR文件对于完全成熟的企业应用程序(包括具有许多Web应用程序的应用程序)而言更好。
paxdiablo

1
在这个微服务时代,将每个WAR完全分开并单独部署而不是将它们捆绑在一起成为一个整体的EAR,不是更有意义吗?
Sayo Oladeji

18

JAR文件

JAR(Java存档的缩写)文件允许将多个文件组合成一个文件。带“ .jar”的文件;扩展被软件开发人员用来分发Java类和各种元数据。这些文件还包含库和资源文件,以及附件文件(例如属性文件)。

用户可以使用Java Development Kit(JDK)的“ .jar”命令提取和创建JAR文件。也可以使用ZIP工具。

JAR文件具有可选的清单文件。清单文件中的条目规定了JAR文件的使用。文件类的“主”类规范将文件表示为独立程序或“独立”程序。

WAR文件

WAR(或Web应用程序存档)文件可以包含XML(可扩展标记语言)文件,Java类以及用于Internet应用程序的Java Server页面。它还用于标记组成Web应用程序的库和Web页面。扩展名为“ .war”的文件包含用于服务器或JSP(Java服务器页面)容器的Web应用程序。它具有JSP,HTML(超文本标记语言),JavaScript和用于创建上述Web应用程序的各种文件。

WAR文件的结构可以允许特殊目录和文件。它还可能具有数字签名(非常类似于JAR文件的数字签名),以显示代码的准确性。

EAR文件

EAR(企业归档)文件将JAR和WAR文件合并到单个归档中。这些扩展名为'.ear'的文件具有元数据目录。这些模块被打包到存档文件中,以使应用服务器中的不同模块平稳并同时运行。

EAR文件还具有部署描述符(它们是XML文件),可以有效地指示不同模块的部署。

在此处输入图片说明


1
应该只是出色图形的最佳答案,谢谢您的大力帮助!
fl0w

12

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

tar(磁带归档文件)-使用的格式是以文件名,文件大小,文件数据的串行单位写入的文件-不压缩。可以很大

Jar(Java存档)-使用的压缩技术-通常包含Java信息,例如class / java文件。但可以包含任何文件和目录结构

战争(Web应用程序档案)-类似的jar文件仅具有用于部署目的的按照JSP / Servlet规范的特定目录结构

耳朵(企业档案)-类似jar文件。具有遵循J2EE要求的目录结构,以便可以将其部署在J2EE应用程序服务器上。-可以包含多个JAR和WAR文件


6

耳文件提供了更多选项来配置与应用程序服务器的交互。

例如:如果应用程序服务器的休眠版本比依赖关系提供的版本早,则可以将以下内容添加到ear-deployer-jboss-beans.xml中,以供JBOSS隔离类加载器并避免冲突:

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

或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> 

这将确保您的应用程序和应用程序服务器之间没有类加载器冲突。

通常,类加载器机制的工作方式如下:

将类加载请求提交给类加载器时,它首先要求其父类加载器满足该请求。父级继而向其父级请求类,直到请求到达层次结构的顶部。如果层次结构顶部的类加载器无法满足该请求,则调用它的子类加载器负责加载该类。

通过隔离类加载器,您的耳朵类加载器将不会出现在父类中(= JBoss /其他AS类加载器)。据我所知,这对于war文件是不可能的。


KNU:耳文件的使用比仅使用耳文件更有效,因为如接受的答案中所述,“它包含Servlet类文件,JSP文件,支持文件,GIF和HTML文件”。由于战争文件也可以包含gif,html,jsp,servlet等...如果每个人都“尽其所能”,也许我们所有人都可以在眼前的问题上变得更加明智。
马克

Maven对您没有帮助吗?您可以指定每个版本的依赖关系,它们会包含在/ lib文件夹中。(在战争档案中)
塞巴(Sebas

是的,但是应用程序服务器/ Servlet容器可以选择用他在自己的lib文件夹中提供的lib覆盖lib文件夹中的这些文件。这样可以防止这种情况。这完全取决于所使用的类加载机制。
马克

6

J2EE定义了三种类型的档案:

  1. Java档案库(JAR) JAR文件封装一个或多个Java类,清单和描述符。JAR文件是最低级别的存档。在J2EE中,JAR文件用于包装EJB和客户端Java应用程序。

  2. Web存档(WAR) WAR文件与JAR文件类似,不同之处在于它们专门用于由Servlet,JSP和支持类制成的Web应用程序。

  3. 企业档案(EAR) ” EAR文件包含组成特定J2EE应用程序的所有组件。


0

为了使项目运输,部署变得容易。需要压缩成一个文件。JAR(Java存档)组的.class文件

WAR(Web存档)-每个战争代表一个Web应用程序-仅使用与Web相关的技术,例如servlet,jsps。-可以在Tomcat服务器上运行-由Web相关技术开发的Web应用程序仅jsp servlet html js-仅信息表示无事务。

EAR(企业归档文件)-每个耳朵代表一个企业应用程序-我们可以使用j2ee中的任何东西(例如ejb),可以愉快地使用jms。-可以在Glassfish之类的服务器上运行,而不能在Tomcat服务器上运行。-使用任何技术开发的企业应用程序,例如所有Web应用程序以及ejbs jms等j2ee的任何内容-使用信息表示进行事务处理。例如。银行应用,电信应用

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.