准备Jar
首先新建一个springboot工程,并为其添加一个测试接口,代码如下:
@RestController
@RequestMapping("/ag")
public class AgentController {
@GetMapping("/sayHello")
public String sayHello() {
return "Hello World";
}
}
然后将其打包,其输出结果为agent-0.0.1-SNAPSHOT.jar这个可执行jar包。
rpm生成
linux测试环境为CentOS 7.6
首先下载jdk14,选择Linux / x64版本,然后解压
cd /opt/
tar -zxvf openjdk-14.0.1_linux-x64_bin.tar.gz
执行以下命令生成rpm包:
/opt/jdk-14.0.1/bin/jpackage -n zzjz-agent \
-i /opt/rpmJar/jpackage/ --main-jar agent-0.0.1-SNAPSHOT.jar \
-d /opt/rpmJar/jpackage
可惜会报错:==错误:类型 [null] 无效或不受支持
网上查了半天是需要先安装rpm-build这个包装工具,同样的其他环境入ubuntu和windows都有对应底层包装工具,ubuntu下是fakeroot,windows下是 WiX 3.0 or later
yum install rpm-build
安装之后重新执行命令就会生成rpm包,然后通过rpm命令安装,发现创建/opt/zzjz-agent的目录,按如下命令启动即可
# 安装
rpm -ivh zzjz-agent-1.0-1.x86_64.rpm
# 执行
/opt/zzjz-agent/bin/zzjz-agent
启动成功截图:
msi生成
windows首次运行jpackage命令也会报错:
==找不到 WiX 工具 (light.exe, candle.exe)==
从 https://wixtoolset.org 下载 WiX 3.或更高版本,然后将其添加到 PATH。
错误:类型 [null] 无效或不受支持
按照提示安装WiX最新版本即可
在此执行发现还是报错:
查看tempDir目录,发现其下已经生成了镜像目录,多次尝试无果后将上图中的light命令摘出来手动执行一下:
light.exe -spdb -cultures:"en-us" -ext WixUtilExtension -out D:\jdk-14.0.1\bin\tempDir2\images\win-exe.image\zzjz-agent-1.0.msi -loc D:\jdk-14.0.1\bin\tempDir2\config\MsiInstallerStrings_en.wxl D:\jdk-14.0.1\bin\tempDir2\wixobj\main.wixobj D:\jdk-14.0.1\bin\tempDir2\wixobj\bundle.wixobj
虽然同样还是报错,但报错信息更详细了:
可以看到报错信息主要是说code page的问题,且多次提到1252这个数字
网上查了下code page是个什么鬼,故事追朔到上古时期在Unicode编码方案问世之前,各个国家、民族为了用计算机记录并显示自己的字符,都在ASCII编码方案的基础上,设计了各自的编码方案;比如大名鼎鼎的GB2312、GBK就是中文专用的编码方案,所有这些各个国家和地区所独立制定的既兼容ASCII又互相不兼容的字符编码,微软统称为ANSI编码,比如ANSI规定ISO 8859-1字符集(即Latin-1字符集)的ANSI代码页1252,简体中文GB编码的代码页是936,这里我们看到了报错中一直出现的1252,打开D:\jdk-14.0.1\bin\tempDir2\config目录,查看以下这两个配置文件:
然后我直接将MsiInstallerStrings_en.wxl中的1252改成936后在此执行light命令后就成功了,具体为什么或者还有其他办法我也不深究了,而且这应该是WiX软件自身的bug,我在linux上用用jpackage就没这个问题,那为什么这么明显的bug还没修复??
最后附上生成的msi安装文件截图,直接双击安装即可:
参考:
A Guide to jpackage in Java 14
JDK14打包工具jpackage的使用
刨根究底字符编码之七——ANSI编码与代码页
发表回复