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打包
在这里插入图片描述
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回车即可)
在这里插入图片描述
5.在cmd窗口输入jdeps --list-deps netty-all-4.1.25.Final.jar(多个jar文件一起查看时可以用命令:jdeps *.jar)
在这里插入图片描述
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
在这里插入图片描述
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
(读者可以根据自己的目录做相应的修改)
在这里插入图片描述

原理解释:

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

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

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

  • 19
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 21
    评论
评论 21
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值