.war和.ear文件

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

从GeekInterview :

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

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

WAR:将包含Servlet类文件,JSP文件,支持文件,GIF和HTML文件的Web模块打包为带有.war(Web存档)扩展名的JAR文件

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

WAR(Web Archive)是一个被加载到Java应用服务器Web容器中的模块。 Java应用程序服务器有两个容器(运行时环境) – 一个是Web容器,另一个是EJB容器。

Web容器托pipe基于JSP或Servlet API的Web应用程序 – 专门为Web请求处理而devise,因此更多的是分布式计算的请求/响应风格。 Web容器需要将Web模块打包为WAR文件 – 这是一个在WEB-INF文件夹中带有web.xml文件的特殊JAR文件。

EJB容器承载基于EJB API的企业Java bean,旨在提供扩展的业务function,例如声明性事务,声明性方法级别安全性和多协议支持 – 更多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模块,尽pipe它们在内部创buildEAR文件作为WAR文件的包装。 独立的Web容器(如Tomcat和Jetty)不支持EAR文件 – 这些文件不是完整的应用程序服务器。 这些容器中的Web应用程序只能部署为WAR文件。

在应用程序服务器中 – EAR文件包含Web模块的应用程序安全angular色映射,EJB引用映射和上下文根URL映射等configuration。

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

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

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

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

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

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

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

tar(磁带归档) – 使用的格式是以fileName,fileSize,fileData的串行单位写入的文件 – 不压缩。 可以是巨大的

Jar(java归档) – 使用的压缩技术 – 一般包含java类的信息,比如class / java文件。 但是可以包含任何文件和目录结构

war(web应用程序存档) – 与jar文件类似,根据JSP / Servlet规范,只有特定的目录结构用于部署

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

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

例如:如果应用程序服务器的hibernate版本比您的依赖项提供的版本旧,那么您可以将以下内容添加到JBOSS的ear-deployer-jboss-beans.xml以隔离类加载器并避免冲突:

 <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 / other AS classloader)中查找。 据我所知,这是不可能的战争文件。

J2EE定义了三种types的档案:

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

  2. Web档案(WAR) WAR文件与JAR文件相似,只是它们专门用于由Servlet,JSP和支持类组成的Web应用程序。

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