IDEA将JavaFx打包为exe Win+Mac+Linux多平台分发等等

前面介绍到了用packr打包javafx17为exe多平台分发,比较复杂,这篇则介绍用idea直接打包exe,比较简单,但是需要注意的是Maven依赖的添加。

使用idea打包的exe会把整个jdk给打包进去,体积比较大,自己可以修改这个打包内容,从而做到减少体积。

一、准备一个javafx项目

这是我用jdk8+fastjson+okhttp+fontawesome+jfoenix+controlsfx开发的一个demo:

javafx 打包mac javafx打包体积太大_exe


算是稍微有点复杂吧?

二、IDEA打包exe

idea中 File》Proiect Structure》Artfacts

添加javafx application

javafx 打包mac javafx打包体积太大_java_02


只需修改两处地方,即启动入口和本地包,Native bundle选择all,注意我用的是idea2020.3.4,若没有javafx这个选项,请考虑更换idea版本!!!

javafx 打包mac javafx打包体积太大_javafx 打包mac_03


然后点构建:

javafx 打包mac javafx打包体积太大_javafx_04


javafx 打包mac javafx打包体积太大_javafx_05


这时你会发现它在out下生成了一个out\artifacts\jdownload\bundles\jdownload\jdownload.exe

javafx 打包mac javafx打包体积太大_java_06


运行它你会发现运行不了:

javafx 打包mac javafx打包体积太大_javafx 打包mac_07

添加Maven依赖

这时因为缺少Maven依赖,打包时没有将maven依赖囊括进来,我们执行Maven命令来将所有Maven依赖导出,手动导入到这个exe的运行环境:
当然,如果你对java的运行环境有点熟悉,那么在打包的时候就能囊括进来,这里按最简单的方法演示

mvn dependency:copy-dependencies -DoutputDirectory=lib

javafx 打包mac javafx打包体积太大_ide_08


javafx 打包mac javafx打包体积太大_java_09

将导出的依赖复制到:out\artifacts\jdownload\bundles\jdownload\runtime\lib\ext下面

javafx 打包mac javafx打包体积太大_java_10


再运行一次out\artifacts\jdownload\bundles\jdownload\jdownload.exe,,你就发现它起来了!

javafx 打包mac javafx打包体积太大_javafx 打包mac_11


至此打包exe完成,哪些图标版本什么的可自行配置。

不难看出,idea它是将所有jdk都copy过去,我们可以下载一个官网的openjdk,将对应不需要的文件替换,从而达到减少内存体积。

创作不易,写文章也花长时间,你觉得对你有帮助请给我点个赞!一健三连…谢谢啦!