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文件的区别。我们了解了每种文件的结构,并讨论了它们的一般用途。最后,我们看到了如何使用每种类型的文件。