java打包jar_war

目前开始系统的学习spring boot,第一个好奇的地方就是可以打包为 jar 或者 war。
那么有什么区别呢?选择的依据是什么呢?

先说结论

  1. 如果需要发布到已存在的Java EE Application Server (e.g. Tomcat)那就打WAR包
  2. 没有上面的需求的话可以打 JAR 包,打 JAR 包的时候使用的是内嵌的容器。

JAR

直接的解释就是 spring boot 可以生成 ‘fat JAR’,把所有资源和依赖都打包进去,同时 java -jar <your jar> 就可以直接启动服务
官网说明
使用 zip 格式打包,可以做到无损压缩,存档,解压,文档开箱等操作

Operation Command
To create a JAR file jar cf jar-file input-file(s)
To view the contents of a JAR file jar tf jar-file
To extract the contents of a JAR file jar xf jar-file
To extract specific files from a JAR file jar xf jar-file archived-file(s)
To run an application packaged as a JAR file (requires the Main-class manifest header) java -jar app.jar
To invoke an applet packaged as a JAR file ```
<applet code=AppletClassName.class
    archive="JarFileName.jar"
    width=width height=height>
```

WAR

需要发布到 web container 例如:Tomcat 或者 Jetty
注意去掉 embedded tomcat
看到有说 WAR 也可以使用 jar 命令直接启动 java -jar xxx.war。目前还没试过。
Web application Archive,与jar基本相同,但它通常表示这是一个Java的Web应用程序的包,tomcat这种Servlet容器会认出war包并自动部署。

Spring boot executable jar/war

spring boot里其实不仅可以直接以 Java -jar demo.jar的方式启动,还可以把jar/war变为一个可以执行的脚本来启动,比如./demo.jar。
把这个executable jar/war 链接到/etc/init.d下面,还可以变为Linux下的一个service。
可玩性很高,不过这个方法存在兼容性问题。需要注意
官方文档