Java 归档文件格式
JAR、WAR、EAR
JAR
JAR (Java Archive) 是一种基于 Zip 的归档包文件格式,通常用于将许多 Java 类文件以及关联的元数据和资源(文本,图像等)聚合到一个文件中以进行分发。其文件拓展名为:.jar
。
所以可以通过 JDK 的 jar
命令创建或提取 JAR 文件,也可以使用 zip
解压缩工具。
JAR 文件,可以作为完整的一个应用程序存在,也可以作为单独的某个功能被其它应用程序使用。
打包命令:
1 | $ jar cf test.jar A.class B.class |
解包命令:
1 | $ jar xf test.jar |
JAR 作为应用存在时,可以通过 java -jar
命令运行:
- 如果定义了 JAR 包的 Main Class
1
$ java -jar test.jar
- 如果没有定义 JAR 包的 Main Class
1
$ java -cp test.jar com.test.App
- 在 JAR 包中,内嵌 Tomcat 或 Jetty
1
$ java -jar test.jar
WAR
WAR (Web Application Archive) 是一种特殊的 JAR 文件格式,是用于分发 JAR 文件,JSP(Java Server Pages),Java 类,XML 文件,静态网页(HTML 和相关文件)以及共同构成 Web 应用程序的其他资源。其文件拓展名为:.war
。
WAR 文件中有特殊文件和目录,WAR 文件中的 /WEB-INF
目录包含一个名为 web.xml
的文件,该文件定义了 Web 应用程序的结构。如果 Web 应用程序仅提供 JSP 文件,则可以不用 web.xml
文件。如果 Web 应用程序使用 Servlet,则 Servlet 容器使用 web.xml
确定 URL 请求将路由到哪个 Servlet。web.xml
文件还用于定义可在 Servlet 中引用的上下文变量,并用于定义环境依赖。
打包命令:
1 | jar -cvf web.war xxx/ |
解包命令:
1 | jar -xf web.war |
WAR 包要搭配 Tomcat 或 Jetty 这类实现了容器的应用服务器启动:
- 默认配置,放置在
/webapps
目录中,启动服务器 - 在 WAR 包中,内嵌 Tomcat 或 Jetty
1
$ java -jar web.war
EAR
EAR(Enterprise Application Archive)是一种特殊的 JAR 文件格式,是 Java EE 用于将一个或多个模块打包到单个存档中的文件格式,以便同时将各种模块部署到应用服务器上。其文件拓展名为:.ear
。
EAR 文件,与 WAR 包类似,本身也是具有特殊结构的 JAR 文件,只是包含的东西更多,其中包含一个或多个表示应用程序的模块(JAR、WAR),以及名为 /META-INF
的元数据目录,包含一个或多个部署描述符(application.xml
)。
打包命令:
1 | jar cf application.ear application.war application.jar META-INF\application.xml |
解包命令:
1 | jar xf application.ear -C ./ |
META-INF/application.xml
示例:
1 |
|
总结
- JAR 是基于 Zip 的归档包文件格式,而 WAR 和 EAR 则基于 JAR 的方式
- 通常的使用方式:
- JAR: 把开发时要引用的通用类及资源做封装,打成包后便于管理和使用
- WAR: 一个完整的 Web 应用,通常是网站或 Web 平台,打成包部署到容器中
- EAR: 企业级应用,实际上 EAR 包中包含 WAR 包和几个企业级项目的配置文件,通常是 EJB 打成 EAR 包