什么是 jar 包
jar 包全称 Java Archive ,中文名叫 java 归档文件,这是一种与平台无关的文件格式,它允许将许多文件组合成一个压缩文件(是的,jar 包就是一种压缩文件,甚至 jar 这个单词就有罐子的意思,实际上 jar 包采用的也是 zip 的压缩方式,只不过将文件后缀定义为 jar)。javaSE 程序可以打包成 jar 包。

jar 包虽然使用 zip 进行压缩和发布,但与 zip 压缩不同,jar 文件还可以用来部署和封装库,组件和插件程序,而且这样的 jar 包是可以直接被编译器和 JVM 直接使用的。

简单的讲,zip 只是将代码文件压缩,打 jar 包不仅是文件压缩,还将代码中的类进行打包,这样就可以让别人直接进行引入调用了。

什么是 war 包
war 包与 jar 包是很类似的,不过 war 包通常用于网站,它是一个可以直接运行的 web 模块。我们在开发 web 项目一般都会使用一个 webapp 文件夹来进行开发,这个文件夹直接放在 Tomcat 的 webapps 文件夹下就可以启动该项目了。而 war 包,就是对这个文件夹进行打包。

war 包是 Sun 提出的一种 web 应用程序格式。它与 jar 类似,是很多文件的压缩包。war 包中的文件按照一定目录结构来组织。

一般其根目录下包含有 html 和 jsp 文件,或者包含有这两种文件的目录,另外还有 WEB-INF 目录。通常在 WEB-INF 目录下含有一个 web.xml 文件和一个 classes 目录。web.xml 是这个应用的配置文件,而 classes 目录下则包含编译好的 servlet 类和 jsp,或者 servlet 所依赖的其他类(如 JavaBean)。通常这些所依赖的类也可以打包成 jar 包放在 WEB-INF 下的 lib 目录下。

区别
使用 jar 文件的目的是把类和相关的资源封装到压缩的归档文件中以方便调用。而对于 war 文件来说,一个 war 文件就是一个 Web 应用程序。它包含 Servlet、HTML 页面、Java 类、图像文件,以及组成 Web 应用程序的其他资源,而不仅仅是类的归档文件。

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

如何打 war 包
war 包的打包也是通过 jar 命令来实现的。使用如下命令即可打包

jar cvf d:/test/myweb2.war.

其中cvf是命令参数,表示生成一个文档、显示生成过程、指定生成的文件名。
d:/test/myweb2.war 为生成的文档的存放路径以及文件名。
最后一个点号表示要将当前目录中所有内容打包。
使用一些开发工具也可以打 war 包,比如 maven 项目就可以用 maven 打包。如果项目中用到了 ant,也可以用 ant 进行 war 包的输出和部署。类似的工具还有 gradle 等等,小编就不一一介绍了。

使用 IDE 一般都会提供打包工具,它们可以简单的打好一个 war 包(关注 W3C技术头条,后续文章教你如何用 idea 和 eclipse 打 war 包)。

war 包怎么部署
war 包的部署是相当简单的,只需要将 war 包放在 Tomcat 的 webapps 文件夹中,启动 Tomcat,它就会自行解包运行相应的 web 项目。

小结
如果仅仅只是为了在本地运行一个 webapp 项目,使用 war 包好像是看不出有什么优势,反而每次运行都要打包显得更麻烦了。但如果是要将项目部署在远程的服务器上,传输一个 war 包和传输一个文件夹的区别就显现出来了,所以学习使用 war 包对于日后从事 web 项目开发是有一定必要性的。