java打包jar_war
目前开始系统的学习spring boot,第一个好奇的地方就是可以打包为 jar 或者 war。
那么有什么区别呢?选择的依据是什么呢?
先说结论
- 如果需要发布到已存在的Java EE Application Server (e.g. Tomcat)那就打WAR包
- 没有上面的需求的话可以打 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。
可玩性很高,不过这个方法存在兼容性问题。需要注意
官方文档