2009-10-20 120 views
460

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

+2

要了解更多关于**'.JAR,.WAR和.EAR' **您还可以看到的视频教程。这是非常简单或更容易理解的。它将解释** .JAR,.WAR **和**。EAR ** **视频教程**:[.JAR,.WAR和.EAR之间的区别](https: //www.youtube.com/watch?v=ecxIBCu2-b4) – 2016-06-01 05:23:13

+1

因为演讲者沉重的印度口音,我无法观看该视频。 – raarts 2017-11-23 09:15:01

回答

431

GeekInterview:包含企业Java Bean(类文件)和EJB EJB模块:

在J2EE应用程序中,模块根据各自的功能

JAR打包为EAR,JAR和WAR部署描述符打包为带有.jar扩展名的JAR文件

WAR: 包含Servlet类文件,JSP文件,支持文件,GIF和HTML文件的Web模块打包为JAR文件w ith .war(网络压缩文件)扩展名

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

+49

这篇文章让我认为EAR只是在一个大EAR中同时出现JARS和WARS,我认为这并不那么简单。 – 2014-02-16 02:13:33

+3

所有的本质都是存档(JAR),但具有不同的扩展以暗示它们的性质/内容。 – KNU 2014-06-05 16:39:48

+1

在大多数情况下,EAR和豆类的单独JAR是不必要的。一个归档中的所有类的简单WAR是正常的。这是一个更详细的解释:http://www.adam-bien.com/roller/abien/entry/ears_wars_and_size_matters – 2017-06-28 07:41:29

24

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

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

这些文件中可能还有其他的东西,但它们的基本意思是它们听起来像它们的意思:Web类型的东西的WAR,企业类型的东西(WARs,代码,连接器等)的EAR。

+2

在我的情况下,我总是在WAR-jar/WEB-INF/lib文件夹中部署WAR,并且工作正常。那么,为什么我应该使用EAR存档? – swapyonubuntu 2015-02-21 06:36:26

+2

@swapyonubuntu,如果您只是部署单个Web应用程序(更具体地说,是一个单独的servlet上下文),那么仅仅执行WAR文件没有任何问题。 EAR文件对于成熟的企业应用程序来说更好,包括那些有许多网络应用程序的应用程序。 – paxdiablo 2015-02-21 09:27:26

+1

在这个微服务的时代,将每个WAR完全分开并单独部署而不是将它们捆绑到一个整体EAR中是否更有意义? – 2015-11-09 18:02:20

35

war - web archive。它用于根据servlet标准部署Web应用程序。它是一个jar文件,其中包含一个名为WEB-INF的特殊目录以及其中的多个文件和目录(web.xml,lib,classes)以及Web应用程序的所有HTML,JSP,图像,CSS,JavaScript和其他资源

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

448

一个WAR(Web归档)是被装入的Java Application Server一个Web container的模块。 Java Application Server有两个容器(运行时环境) - 一个是Web容器,另一个是EJB容器。

Web容器托管基于JSP或Servlet API的Web应用程序 - 专门为Web请求处理而设计 - 所以更多的是请求/响应风格的分布式计算。 Web容器需要将Web模块打包为WAR文件 - 这是WEB-INF文件夹中具有web.xml文件的特殊JAR文件。

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

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

基本上EAR文件是含有WAR文件JAR文件的超集。 Java应用服务器允许在WAR文件中部署独立的Web模块,尽管它们在内部创建EAR文件作为WAR文件的包装。独立的Web容器(如Tomcat和Jetty)不支持EAR文件 - 这些文件不是完整的应用程序服务器。这些容器中的Web应用程序只能部署为WAR文件。

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

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

+21

+1,因为这个答案描述了你为什么要使用其中一个。 – 2014-03-07 22:58:50

+1

我可以使用7Zip/WinZip/WinRar等来提取它们(例如fileName.jar)吗? – KNU 2014-06-05 17:19:56

+4

@KNU yes,'.jar','.war'和'.ear'文件都是简单的zip压缩文件,因此可以通过任何可以处理普通.zip文件的程序打开。 – acdcjunior 2014-06-12 01:45:38

6

Ear文件提供更多选项来配置与应用程序服务器的交互。例如:如果应用程序服务器的休眠版本比您的依赖关系提供的版本旧,那么您可以将以下内容添加到JBOSS的ear-deployer-jboss-beans.xml以隔离类加载器并避免冲突:

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

或为src /主/应用/ 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> 

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

通常情况下,类加载器的机制是这样的:

当一个类加载请求被提交给一个类加载器,它首先 要求其父类加载器来完成请求。父母在 转,询问其父母的班级,直到请求到达顶层 的层次结构。如果层次结构顶层的类加载器 无法完成请求,则调用它的子类加载器负责加载该类。

通过隔离类加载器,您的ear类加载器不会在父类(= JBoss/other AS classloader)中查找。 据我所知,这是不可能的战争文件。

+0

KNU:这种使用ear文件比使用它更有效,因为它包含了Servlet类文件,JSP文件,支持文件,GIF和HTML文件,正如接受的答案中所述。由于war文件也可以包含gif,html,jsp,servlets ......如果每个人都“以他的力量回答”,也许我们都可以在这个问题上变得更加聪明。 – Mark 2014-06-06 13:23:24

+0

Maven为你做的不是吗?您可以指定每个版本的依赖关系,并将它们包含在/ lib文件夹中。 (在war文件中) – Sebas 2015-01-09 17:00:39

+0

是的,但是应用程序服务器/ servlet容器可以选择在lib文件夹中用他在自己的lib文件夹中提供的库来覆盖它们。这可以防止这种情况。这一切都取决于使用的类加载机制。 – Mark 2015-01-12 08:53:21

9

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

焦油(磁带归档) - 使用的文件写在文件名,档案大小,FILEDATA 的序列单位格式 - 无压缩。可以是巨大的

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

战争(web应用程序归档) - 类似像jar文件只有特定的目录结构为每个JSP/Servlet规范进行部署的目的

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

6

J2EE定义了三种档案:

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

  2. 网络归档(WAR) WAR文件与JAR文件类似,但它们专门用于由Servlet,JSP和支持类构成的Web应用程序。

  3. Enterprise Archives(EAR)“EAR文件包含组成特定J2EE应用程序的所有组件。

1

JAR文件

一个JAR(简称Java归档)文件允许的几个 文件组合成一个单一的一个。带'.jar'的文件; 软件开发人员利用扩展来分发Java类和各种元数据。 这些还保存库和资源文件,以及配件文件 (如属性文件)。

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

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

WAR文件

一场战争(或Web应用程序归档)文件可以包含XML (可扩展标记语言)文件,Java类,以及Java服务器 页互联网应用的目的。它也被用于标记构成Web应用程序的库和Web页面 。包含 文件的'.war '扩展包含用于服务器或JSP(Java 服务器页面)容器的Web应用程序。它具有JSP,HTML(超文本标记 语言),JavaScript以及用于创建前述 Web应用程序的各种文件。

WAR文件是这样构成的,以允许特殊的目录和 文件。它也可能具有数字签名(非常像JAR文件) 以显示代码的准确性。

EAR文件

的EAR(企业档案)文件合并JAR和WAR文件到 单一存档。具有'.ear '扩展名的这些文件具有用于 元数据的目录。这些模块被打包到归档中,以便在应用服务器中同时操作不同模块。

EAR文件还具有部署描述符(它们是XML文件) ,它们有效地规定了不同模块的部署。

enter image description here

相关问题