使用 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 的路径和包名,可以使用相对路径

最低0.47元/天 解锁文章
797

被折叠的 条评论
为什么被折叠?



