JDK14+JAVAFX14+Maven定制jre打包瘦身,必成版

注: 本教程jdk9以上版本通用(任何java项目都可以通过本教程精简jre)

博客来由:

jdk9以后代码模块化逐渐成为趋势,jlink工具开始出现在人们的视野中,它可以用来定制项目所需要的jre,从而大幅度瘦身,jdk14则更强大,出现了jpackage工具(亲测本教程已超越jpackage,最后包大小远小于jpackage),不用再去使用jlink单独制作jre,它可以直接一串命令生成exe或msi格式安装包(当然底层还是Jlink),当然这是建立在项目所有依赖都能模块化的基础之上的,可是实际情况是存在很多不能直接转化的或者转化难度特别高的,例如netty的jar包,它是不能直接模块化的jar包,更不能制作成jmod文件,因为它的子依赖都还有依赖,数量繁多,如此很难实现模块化(除非你下载源码,加上所有内容的模块化编译重新打包),既然如此只能另辟蹊径!全套打包流程来了

注意 :模块化的jar包用解压缩工具打开时最外层有一个module-info.class的文件,非模块化没有

1.请务必先阅读上一篇项目搭建,
JDK14新建javafx+Maven项目,重点: 注意pom文件中的打包方式–将Maven依赖打入jar包,是后续瘦身打包的前提!

2.打开IDEA右侧的MavenProject,选择package打包
JDK14+JAVAFX14+Maven定制jre打包瘦身,必成版_第1张图片
3.得到我们需要的jar包,将其放入C:\Users\Administrator\Desktop\lib\目录备用

4.找到netty在本地Maven仓库(C:\Users\Administrator.m2\repository\io\netty\netty-all\4.1.25.Final)中的jar包,将它复制出来,放入你自己新建的文件夹,例:C:\Users\Administrator\Desktop\lib\netty-all-4.1.25.Final.jar,此时我们进入lib目录并在当前目录进入cmd窗口如下(在地址栏输入cmd回车即可)
JDK14+JAVAFX14+Maven定制jre打包瘦身,必成版_第2张图片
5.在cmd窗口输入jdeps --list-deps netty-all-4.1.25.Final.jar(多个jar文件一起查看时可以用命令:jdeps *.jar)
JDK14+JAVAFX14+Maven定制jre打包瘦身,必成版_第3张图片
6.记录下来上面红框中的jdk自带模块 java.base,java.logging,java.naming,java.xml,jdk.sctp,jdk.unsupported,同理我们将自己用到的别的依赖也这样记录出来(只需记录java.*和jdk.*的模块,一般用到的都特别少,整个javafx14也就用到了java.base和java.desktop,这两个必须加入,现在你只需要查询下你自己jar包的依赖就可以了),最后我们将他们整合到一起在lib目录中打开cmd执行jlink命令:
前提:请确认你已经安装了jdk11或以上版本,并将其bin目录添加到环境变量path
jlink --strip-debug --compress 1 --no-header-files --no-man-pages --output miniJre --add-modules java.base,java.logging,java.naming,java.xml,jdk.sctp,jdk.unsupported,java.desktop
JDK14+JAVAFX14+Maven定制jre打包瘦身,必成版_第4张图片
7.这个miniJre目录中存放的就是我们所需的精简版jre,此时可以测试了,打开cmd输入命令:
C:\Users\Administrator\Desktop\lib\miniJre\bin\java.exe -jar C:\Users\Administrator\Desktop\lib\xzlDemo-1.0-SNAPSHOT-jar-with-dependencies.jar
(读者可以根据自己的目录做相应的修改)
JDK14+JAVAFX14+Maven定制jre打包瘦身,必成版_第5张图片

原理解释:

我们的Maven依赖包大部分都是基于jdk的,不管中间有多少层封装,我们只需提取出jar包最底层所需要的模块依赖(java.*和jdk.*)即可,直接用jlink定制出最少模块的jre,然后将整个项目打包成一个带依赖的jar包就好了,运行这个jar包所需要的jdk模块都已经被我们提取出来了,最后就能正常运行

8.接下来就是网上比较常见的进一步打包过程
准备工具:exe4j(将jar文件打包成exe)和Innosetup(将exe和jre目录一起打包成安装版的exe)
注:各类工具我已经放到qq群 835259695 文件,有需要的直接加群下载

9.exe4j打包,hello.exe程序测试如下,过程请查看- 使用exe4j打包javafx项目
JDK14+JAVAFX14+Maven定制jre打包瘦身,必成版_第6张图片
11.使用innoSetup工具将exe和jre打包为一个exe安装文件(应用进一步瘦身!),详细制作过程见-
使用Innosetup制作安装包
JDK14+JAVAFX14+Maven定制jre打包瘦身,必成版_第7张图片
大功告成,你可以将你的程序发你的小伙伴试试了!
总结:
本教程适用jdk9以上版本,且本教程为示例,加入了netty包,但也只有25M(与QT相差不大),正常来说如果你的javafx项目没用这种复杂的依赖的话十几兆就可以解决(请注意这是一个应用程序安装包,内置JDK14,windows64位下都可以使用!),经测试,本教程优于JDK14的jpackage工具

详情见-JDK14打包工具jpackage的使用

项目源码已上传GitHub(https://github.com/savitar008/jdk14-jpackage),项目工具可以加qq群(835259695)免费下载!
喜欢的老铁请给小生一个赞 ~_~
转载请注明出处!

你可能感兴趣的:(JDK14+JAVAFX14+Maven定制jre打包瘦身,必成版)