Jar和War的区别

Java项目打包时有两种方式:jarwar,这两种方式有以下区别

1.概念

jar包

全称java archive,即java归档文件,是一种平台无关的文件格式(可以理解为一种压缩包)。

JAR 文件通常用于存储 Java 类文件、关联的元数据和资源(如文本、图片等)。它们可以用作 Java 库(用于其他项目)或可执行的独立应用程序。JAR 文件可以直接通过 Java 命令(java -jar myapp.jar)执行,前提是 JAR 文件包含一个 Main-Class 清单属性,指示 JVM 如何启动应用程序。

war包

war包是一个可以直接运行的web模块,通常用于网站。开发web项目时会使用webapp文件夹,这个文件夹放在tomcat的webapps下就可以启动该项目了,war包就是对这个文件夹打包。

war文件包含 Java 类文件、资源文件、JSP 文件、HTML 文件、JavaScript 文件、CSS 文件、图像文件等。war 文件需要部署在支持 Java Servlet 规范的容器(如 Tomcat、Jetty、WebSphere 等)中,以便 Web 应用程序可以在 Web 服务器上运行。

简单的来说,jar 只是类的归档文件,而 war 包是一个完整的 web 应用程序。

2.文件结构

jar

jar 文件的结构简单,通常包含类文件、资源文件和清单文件(META-INF/MANIFEST.MF)。清单文件可以包含元数据,如 Main-Class 属性,指示 JVM 应用程序的入口点。

war

WAR 文件具有更严格的目录结构,根据 Java Servlet 规范组织。

以下是标准 WAR 文件的目录结构:

├── WEB-INF
│ ├── classes
│ │ └── (Java 类文件)
│ ├── lib
│ │ └── (JAR 库文件)
│ ├── web.xml (部署描述符)
│ └── …
├── (JSP, HTML, CSS, JS 等静态资源和其他资源文件)
└── …

在这个结构中,WEB-INF 目录是特定于 Web 应用程序的,包含 Java 类文件、库文件和部署描述符(web.xml)。部署描述符定义了应用程序的配置、Servlet 映射、监听器等。

3.部署

  • Spring项目对普通无web的独立spring项目打包成jar即可;有web需求则打包成war,运行在外部servlet容器
  • SpringMVC项目基于web的java应用程序,需要部署到外部servlet容器,显然要用war方式
  • SpringBoot项目SpringBoot内置了Servlet容器(默认为tomcat),所以可以打包成jar直接运行
  • SpringCloud通常采用微服务架构,这意味着项目中的各个模块是独立的服务。在这种情况下,一般将模块打包成 jar,有以下优点:
    • 可以利用SpringBoot内置的servlet容器简化部署和运行过程;
    • 方便微服务各模块间相互独立的部署和扩展;
    • 方便应用程序容器化(如Docker),因为jar可以直接在容器中运行;
    • 云原生支持:许多云平台(如 AWS、Azure 和 Google Cloud)为 jar文件提供了原生支持,方便部署、管理和扩展微服务

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注