痛苦玩转Java的jpackage模块打包Windows可执行程序(包含第三方非模块化包)

  使用 jpackage 生成运行时映像,对于windows平台可以直接生成 exe 文件,并附带运行环境,双击即可运行;所有的 jar 被打包为单个 modules 文件,位于生成的最终运行环境文件的 runtime\lib 中;一个简单的 JavaFx 应用打包后不会超过100M。

  在此过程中会遇到很多不支持模块化(module)的JAR包,这些依赖的包内部没有 module-info.class 文件,我们会搞定它!

痛苦过程1:不可避免的会遇到并依赖非模块化的jar包。

  例如 commons-logging(org.apache.commons.logging),只要使用了apache 的开源包,几乎不可避免的会依赖日志组件。由于许多开源包并未提供模块化支持因此这是绕不开的麻烦;除非不用任何外部依赖。

  解决办法就是手动为这些依赖包注入 module-info.class 使其成为模块包,首先需要通过 jdeps 命令从 jar 包导出 module-info.java 文件,命令如下示例。

jdeps --ignore-missing-deps --multi-release 21 --generate-module-info %OUT% %JAR%

%OUT% 输出文件的目录,通常会输出自动包名文件夹内部有 module-info.java
%JAR% JAR 的路径和包名,可以使用相对路径

  获得 module-info.java 文件之后要将其编译为 module-info.class,命令如下所示例。

javac -p %DIR%\lib --patch-module org.apache.pdfbox=%JAR% %DIR%\org.apache.pdfbox\versions\21\module-info.java

%DIR% 之前的输出文件目录
%DIR%\lib 依赖包的目录位置
%JAR% JAR 的路径和包名,可以使用相对路径

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值