1. 概述

在这个教程中,我们将探讨Java JAR(Java ARchive)、WAR(Web Application ARchive)和EAR(Enterprise Application aRchive)这些文件格式之间的差异。我们将讨论每种文件格式的功能以及如何使用它们。

2. Java文件格式

Java规范定义了多种类型的文件。最突出的是JAR、WAR和EAR,但也有一些其他类型。从JAR开始,每种类型都分别建立在前一种之上。

尽管JAR文件格式属于JavaSE规范的一部分,但WAR和EAR文件本身属于JavaEE,现在称为JakartaEE。

3. JAR文件

如我们所知,JAR文件是Java应用程序的基本文件格式

实际上,它就是一个带有.jar扩展名的.zip文件。它包含了类、资源和元数据文件等内容。

我们可以使用jar命令创建JAR文件,并且只需要Java运行环境(JRE)就可以在任何系统上通过java -jar命令运行

4. WAR文件

WAR文件用于打包Java web应用

它们本质上也是.zip文件,是JAR文件格式的扩展。

除了类和资源,WAR文件还可以包含作为库的形式存在的其他JAR文件,如JSP文件、Java Servlets,以及所有类型的静态网页文件(HTML、CSS、JavaScript等)。

JakartaEE规定,正确格式化的WAR文件必须包含一个名为WEB-INF的目录,其中包含web.xml文件。在这个文件中,我们声明web应用的结构和配置,例如每个Servlet的网络路径或会话超时时间。

与JAR文件不同,WAR文件不能独立运行,只能作为另一个应用,如servlet容器或应用服务器的组件使用

将WAR文件部署到服务器的过程称为应用部署。常见的应用服务器包括Tomcat、Jetty和Wildfly。

5. EAR文件

EAR文件用于构成多模块的企业级应用

有多种类型的模块,但最常见的包括web模块(本质上是WAR文件)和EJB模块,这些是特殊的JAR文件,包含企业JavaBean类。

类似于WAR,EAR是JAR的扩展,必须包含一个根META-INF目录下的特殊XML文件,名为application.xml。在这个文件中,我们描述整个企业应用并列出其模块。此外,我们还可以添加整个应用的安全角色。

像WAR一样,EAR文件也不能独立运行,必须部署到应用服务器上

然而,在这种情况下,并非所有类型都兼容。我们需要使用支持JakartaEE技术的服务器,如Wildfly,而不能使用Jetty。对于Tomcat,它也不兼容,但有一种变体,称为TomEE,是兼容的。

EAR格式的优势在于它允许我们在单个文件中指定复杂的多组件应用。此外,我们可以共享通用资源以避免重复。最后,单一文件格式非常有用,因为它消除了部署错误。

6. 总结

在这篇文章中,我们探讨了WAR和EAR文件的区别。我们了解了每种文件的结构,并讨论了它们的一般用途。最后,我们看到了如何使用每种类型的文件。