java精简jre打包(jdk14、15)

自己也搭建了个新的博客,部分文章与csdn同步.本文在我的新博客同样可以看到:http://spzgczyj.top/blog/

在此之前,我曾经写过Java 精简Jre,Java 精简Jre_水瓶座鬼才的博客-CSDN博客_java jre 。这个是jdk8版本的精简,但是jdk8版本的精简非常繁琐,而且精简后部分电脑是运行不了的,还会出很多问题。

我那时候就觉得为什么甲骨文官方不出exe打包工具,主要是有些gui小工具我是用java写的,我总不可能带那么大的jre到对方电脑去吧。我问过很多老师,他们给我的答案都是让客户自己去装个jdk.....

我当时就不信,在我有生之年等不到java出打包工具那天,结果没过几年,jdk14和jdk15出来了。我一直在关注jdk新版本的特性,这回我看到了打包工具(孵化阶段)创建一个用于打包独立 Java 应用程序的工具。我当时就很高兴,但是用了后发现并没有我期望的那么好,不过我改进了方法,终于总结出了一个比较可靠的java程序打包方法,主要针对jdk14和jdk15的。

1.jdeps 

    我们的第一步就是用jdeps,查看jar包的依赖,比如:

jdeps E:\MyjavaProject\finishedProduct\FXMusicPlayer\FXMusicPlayer.jar

如果你用了javafx,(javafx在jdk11后分离,我们大部分打包的java程序很多时候不是swing就是javafx这种gui程序),你得指定第三方模块的路径,不然会报错:

jdeps --module-path H:\JDK\openjfx\javafx-sdk-15.0.1\lib --add-modules javafx.base E:\MyjavaProject\finishedProduct\FXMusicPlayer\FXMusicPlayer.jar

然后我们可以看到这个,主要看右边有那些模块,这里有java.base,java.desktop等等。

2. jlink

一般常用的模块导出即可,建议出现在右边的那些全部导出,导出的指令示例:

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,java.sql,jdk.charsets,java.net.http,jdk.xml.dom,jdk.jsobject,jdk.jfr,jdk.net,java.rmi,jdk.crypto.ec,jdk.nio.mapmode

比较重要的:java.base,java.logging,java.naming,java.xml,jdk.sctp,jdk.unsupported,java.desktop

这里提醒一下,如果你的项目用到了https,请导出jdk.crypto.ec,因为你不导出这个就会出现

javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure

链接握手异常,java.net.http和jdk.net也建议导出。

3. 编写批处理脚本

导出后你就可以在当前文件夹下找到个miniJre的文件夹了,这个就是导出的jre,一般就60mb,你可以删除里面的legal文件夹,conf,bin,lib不能删除!然后你可以把你的jar包当到这个文件夹下,写批处理用相对路径的jre运行,也可以解压jar包,我是解压jar包然后写批处理运行,我的bat脚本是:

start /b %~dp0bin\javaw.exe -splash:images/center/loading.gif -XX:+UnlockExperimentalVMOptions -XX:+UseZGC -Dfile.encoding=utf-8 cn.gxust.MainRunApp

-splash是指定启动java程序时的启动动画,我用了一个gif,这个你可以删掉,

-XX:+UnlockExperimentalVMOptions -XX:+UseZGC

这个是我想用jdk14、jdk15的zgc,这个新gc比cms强,就是看准了这个新的gc强悍的回收效率我才选择了jdk15。起码让我的javafx程序少了300mb的运行内存。

最后程序的结构:

bin、lib、conf是jre的主体,总共就52.3mb,最后94.4mb那是因为我jar解压45mb,毕竟我加了javafx依赖,还有很多杂七杂八的第三方库,还有大把的jpg,主要是图片太多了,占多容量。

4. 打包java程序

最后把这个整个文件夹用innosetup打包成安装包就行了。

  • 5
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值