参考:
- https://www.jianshu.com/p/3b5c45e8e5bd
- https://www.cnblogs.com/banml/p/11767305.html
- https://blog.youkuaiyun.com/cjw12581/article/details/107463971
文章目录
1. jar 包
JAR(Java Archive),是与平台无关的文件格式。它允许将多个文件组合成要给压缩文件。
-
其实可以对比一下:
jar
与rar
,j 可以理解成 java。
jar 包其实就是 java 项目压缩包,是通过 java 程序压缩产生的压缩包。jar 包是通过 JavaSE 程序打成的包。
jar 与 zip 异同
jar
文件格式以流行的 zip
文件格式为基础。
- 同:
jar
、zip
用于压缩和发布 - 异:
jar
还用于- 部署
- 封装库、组件、插件程序
- 可被编译器、jvm 等工具直接使用
另外 jar 包还含有特殊的文件,如 manifest 和部署描述符,用来指示工具如何处理特定的 jar。
jar 包目录结构如下:
根目录
|
|---- 该包的 java 类文件目录
|
|---- META-INF 目录 // 存放该包和扩展的配置数据
jar 包主要用途
在 jar 包中包含已经写好的一些类,这些类打包到一起便于存放管理。将 jar 包引入到自己的项目中,就可以直接使用这些 jar 包中的类和属性(从前这些 jar 包都会被扔到 lib/
目录下)。
2. war 包
war 包就是 web 项目压缩包。war 是一个可以直接运行的 web 模块,一个 war 包可以理解成就是一个 web 项目,通常用于网站,打成包部署到容器(如 tomcat)中。以 Tomcat 为例,war 包放置在其\webapps\
目录下,然后启动 Tomcat,这个包就会自动解压,就相当于发布了。
war 包是 Sun 公司提出的一种 web 应用程序格式,与 jar 类似,也是很多文件的压缩包。
war 包是 JavaWeb 程序打的包。,包含了项目的所有东西,包括:
- 代码编译成的 class 文件
- 依赖包
- 配置文件
- 网站页面(html、jsp、servlet、图片文件等)
war 包中文件按照一定目录结构来组织。
根目录
|
|---- .html、.jsp (或包含这两种文件的目录)
|
|---- WEB-INF 目录 // 存放 .class 文件和配置文件
| |
| |---- web.xml // 该应用的配置文件
| |
| |---- classes 目录
| | |
| | |---- 编译好的 servlet 类和 js
| | |
| | |---- servlet 所依赖的其他类(如 JavaBean)
| |----- lib // 存放该包的依赖 jar 包
|
|---- META-INF 目录 // 存放该包和扩展的配置数据
其中,servlet 所依赖的类也可以打包成 jar 包放在 WEB-INF
下的lib
目录下。
war 包部署优势
一个 Web 应用程序的目录和文件可能会非常多,将这个 Web 应用程序部署到另一台机器上,会不太方便,因此,可以将这个 Web 应用程序打包成 Web 归档文件(war),过程和把 java 类文件打包成 jar 相似。
利用 war 文件,可以把 servlet 类文件和相关的资源集中在一起进行发布。
-
这样一来,Web 应用程序不再是按照目录层次结构来进行部署,而是把 war 文件作为部署单元来使用。
开发阶段不适合使用 war 的原因
开发阶段经常需要添加或删除 web 应用程序的内容、更新 Servlet 类文件,而每一次改动后,重新建立 war 包将很浪费时间。
在开发阶段,我们通常将Servlet源文件放到Web应用程序目录的 src 子目录下,以便和Web资源文件区分。在建立 war 文件时,只需要将 src 目录从 Web 应用程序目录中移走,就可以打包了。
在产品发布阶段,使用 war 包比较合适,因为这个时候,几乎不需要再做什么改动了。
部署 war 包到 tomcat
-
开发人员打 war 包给测试,现在测试拿到一个 war 包:test.war
-
打开 tomcat 的安装路径 ,假设是
D:\Tomcat\apache-tomcat-7.0.68
,然后进入到 webapps 文件夹中,把 test.war 放到 webapps 文件夹。 -
启动Tomcat。
如果不需要更改配置文件:到这一步就可以了。
在浏览器输入
http://localhost:tomcat_port/test
即可打开 test 项目的 index.jsp 页面( tomcat_port 是自己的端口号)。如果 test 项目没有 index.jsp 页面,那就需要打开其他相应的页面。
如果需要更改配置文件:
-
关闭 tomcat。
-
删除 test.war文件(因为 tomcat 启动后会自动解压 test.war,如果在 tomcat 启动的状态下去删除 war 包,解压好的文件夹也会被一并删除,所以需要停止 tomcat, 然后删掉 war 包,之后再启动。项目文件夹就不会被认为是 war 解压而来的)。
-
由于刚刚启动过 tomcat,tomcat会自动解压缩 test.war 为 test 文件夹。所以我们在 webapps 下面可以看到 test 文件夹。打开 test 文件夹更改配置文件即可。
-
更新完配置之后,启动 tomcat。
-
浏览器打开即可。
3. jar 包 vs. war 包
jar 包 | war 包 | |
---|---|---|
定位 | 类的归档文件 | web 应用程序/ Web 归档文件 |
查看内容方式 | WinRaR 可以直接打开 | 需要先把后缀名改为.rar ,再用 WinRaR 打开;或者保留后缀名不变,手动选择打开方式时,手动选出 WinRaR.exe(推荐打开方式中不能自动识别 WinRaR) |
内容 | java类、配置文件 | Servlet、html页面、java类、图像文件以及组成 web 应用程序的其他资源 |
目录结构 | META-INF 目录:存放包和扩展的配置数据,如:安全性、版本信息 | WEB-INF 目录:存放 .class 文件和配置文件;META-INF 目录:存放包和扩展的配置数据,如:安全性、版本信息 |
应用 | 部署、 封装库、组件和插件程序 | 部署/发布 |
部署项目区别 | SpringBoot项目 (因为SpringBoot 内置了 tomcat) | Spring项目 |
SpringBoot 打包方式区别
其实 SpringBoot 项目既可以打成 jar 包,也可以打成 war 包发布。
打成 jar 包 | 打成 war 包 | |
---|---|---|
运行 | 直接通过内置 tomcat 运行 | 需要安装 tomcat(可以灵活选择 tomcat 版本),然后将 war 包放到 tomcat 的 webapps/ 目录下 |
tomcat 配置变更 | 在 SpringBoot 的配置文件中设置 | 直接对 tomcat 配置修改 |
日志 | 内置 tomcat 没有日志输出,得靠 jar 包应用输出日志 | tomcat 有自己的日志输出 |
SpringBoot 适宜打成 war 包的场景
SpringBoot 打成的 jar 包自带 tomcat 容器,适用于单个项目。
但若要把多个项目部署到同一个 tomcat 容器上,则需要分别打成 war 包。再将多个 war 包部署到同一个 tomcat 容器上,以达到节省资源目的。