欢迎访问昆山宝鼎软件有限公司网站! 设为首页 | 网站地图 | XML | RSS订阅 | 宝鼎邮箱 | 宝鼎售后问题提交 | 后台管理


新闻资讯

MENU

软件开发知识

所以在li CAD加密 nux/unix下面

点击: 次  来源:宝鼎软件 时间:2017-06-01

原文出处: hengyunabc

Spring boot executable jar/war

spring boot里其实不只可以直接以 Java -jar demo.jar的方法启动,还可以把jar/war变为一个可以执行的脚原来启动,好比./demo.jar。

把这个executable jar/war 链接到/etc/init.d下面,还可以变为Linux下的一个service。

只要在spring boot maven plugin里设置:

<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<executable>true</executable>
</configuration>
</plugin>

这样子打包出来的jar/war就是可执行的。更多具体的内容可以参考官方的文档。

http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#deployment-install

zip 名目里的 magic number

生成的jar/war实际上是一个zip名目标文件,这个zip名目文件为什么可以在shell下面直接执行?

研究了下zip文件的名目。zip文件是由entry构成的,软件开发,而每一个entry开头都有一个4个字节的magic number:

Local file header signature = 0x04034b50 (read as a little-endian number)

即 PK\003\004

参考:https://en.wikipedia.org/wiki/Zip_(file_format)

zip处理惩罚软件是读取到magic number才开始处理惩罚。所以在linux/unix下面,可以把一个bash文件直接写在一个zip文件的开头,这样子会被认为是一个bash script。 而zip处理惩罚软件在读取这个文件时,仍然可以正确地处理惩罚。

好比spring boot生成的executable jar/war,的开头是:

#!/bin/bash
#
# . ____ _ __ _ _
# /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
# ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
# \\/ ___)| |_)| | | | | || (_| | ) ) ) )
# ' |____| .__|_| |_|_| |_\__, | / / / /
# =========|_|==============|___/=/_/_/_/
# :: Spring Boot Startup Script ::
#

在script内容末了,软件开发,软件开发,可以看到zip entry的magic number:

exit 0
PK^C^D

spring boot 的 launch.script

实际上spring boot maven plugin是把下面这个script打包到fat jar的最前面部门。

https://github.com/spring-projects/spring-boot/blob/1ca9cdabf71f3f972a9c1fdbfe9a9f5fda561287/spring-boot-tools/spring-boot-loader-tools/src/main/resources/org/springframework/boot/loader/tools/launch.script

这个launch.script 支持许多变量配置。还可以自动识别是处于auto照旧service差异mode中。

所谓的auto mode就是指直接运行jar/war:

./demo.jar

而service mode则是由操纵系统在启动service的环境:

service demo start/stop/restart/status

所以fat jar可以直接在普通的呼吁行里执行,./xxx.jar 可能link到/etc/init.d/下,变为一个service。