javaFx打包exe程序

将代码打成jar包

打jar之前,把那些用不到的依赖统统删除,以免包含一些无用的内容,比如用不上的一些依赖jar,Test【moudle】依赖的一些库,如junit等

  1. Project Structure-Artifacts-添加-jar-From modules with dependenies
    在这里插入图片描述
  2. 配置module
    在这里插入图片描述
  • 选择Module,一般我们只需要项目的main【module】,不需要test【module】
  • 选择Main Class,也就是程序的入口类
  • 选择META-INF生成目录的位置,这里注意了,只需要到src或者main【其他位置试过了,打出的jar没有东西】
  1. 配置资源目录
    在这里插入图片描述
  • 我们看到,这里并没有resource目录,可能是idea版本问题,这里不手动添加resource目录的话,打出的jar包找不到资源文件

在这里插入图片描述

  • 点击+号,添加Directory Content - 选择项目的resource文件夹添加进来
    在这里插入图片描述
  1. 生成jar包
    在这里插入图片描述
  • Build - Build Artifacts - build
  • 在项目目录下会生成一个out文件夹,生成的jar就在里面
  1. 测试jar是否可用
    在这里插入图片描述
  • 选中jar包,右键 - Open in Terminal
  • 注意了,每次Open in Terminal都会打开一个终端,记得在下次打包前要关闭,否则文件被占用,新打包的jar无法覆盖,会出错
  • 在终端输入命令 java -jar + 【Tab】,如果jar包正常运行,则成功
  • 将jar包拷贝一份,比如放到G:\ttt\xxx.jar,后面我们将所有和打包相关的东西都放ttt文件夹

准备工作

下载exe4j

https://exe4j.apponic.com/download/

  • 通过 exe4j将jar包装成exe可执行文件
  • 下载后安装【傻瓜式安装】
  • 安装完成后记得一定要注册,否则打出的exe程序会报异常
This executable was created with an evaluation version of exe4j

在这里插入图片描述
Name和Company随便填
注册码选一个即可:
A-XVK258563F-1p4lv7mg7sav
A-XVK209982F-1y0i3h4ywx2h1
A-XVK267351F-dpurrhnyarva
A-XVK204432F-1kkoilo1jy2h3r
A-XVK246130F-1l7msieqiwqnq
A-XVK249554F-pllh351kcke50
A-XVK238729F-25yn13iea25i
A-XVK222711F-134h5ta8yxbm0
A-XVK275016F-15wjjcbn4tpj
A-XVK275016F-15wjjcbn4tpj

定制jre

在这之前,我们先来思考一下,我们的jar包只包含了我们自己写的一些代码,它是如何在widows系统中运行起来的呢?那是因为我们电脑上已经安装的jdk,而jdk包含了jre环境,我们的程序是给别人用的,被人的电脑上可不一定有jre环境,所以,我们要将jre打包进exe程序

  • 在jdk1.8之前,jre是直接提供给我们的,由于包含了很多我们用不上的代码,导致生成的exe程序很大
  • 在jdk11及以后的版本,采用了模块化的做法,也就是Jmods,把原来的jdk分成各个jmods,jre需要自己生成,定制jre的时候,用到什么模块,就导入哪个模块
  • 关于jdk11及往后版本收费的问题,业内你一句我一句的,我是没整明白到底收不收费,反正我是这么认为的,开发的软件没几个人用,用啥版本他也懒得管,不过我有一个疑问,既然OpenJDK免费,为啥大家还是在用oracle家的JDK呢?

检测jar包用到jre的哪些jmods

在cmd等终端中输入命令:


jdeps --module-path "F:\javafx\SDK\javafx-sdk-11.0.2\lib" --list-deps G:\ttt\NoteStudio.main.jar

  • “F:\javafx\SDK\javafx-sdk-11.0.2\lib” 指的是你项目依赖的jar包,这些jar包可能也会依赖jmods
    在这里插入图片描述
    这里检测出我的jar包用到了五个模块的内容
    java.base
    java.desktop
    java.xml
    javafx.base
    jdk.unsupported
    分别对应jdk - jmods下面的模块
    在这里插入图片描述
    也就是说,我们定制的jre,只要包含这五个模块就行了

等等,jdk中有javafx.base.jmod吗?没有!jdk11已经把javaFx独立出去了,在项目中我们直接引入javafx包就行了,但是我还是有个不明白的地方,我的项目明明用到了javafx.base.jar,javafx.controls.jar,javafx.graphics.jar,为啥只检测出javafx.base呢?
在这里插入图片描述
不管他了,反正不影响我打包,也就是说,我只要导出4个jmods就行了

生成jre

输入命令:


jlink --module-path jmods --add-modules java.base,java.desktop,java.xml,jdk.unsupported --output myjre

在这里插入图片描述
在当前目录下生成myjre
在这里插入图片描述
将这个myjre移动到我们前面建的ttt文件夹备用

准备exe图标

要ico格式的,提供一个在线生成ico图标的地址
http://pdftoword.55.la/img2icon/

使用exe4j将jar转换成exe程序

经过上面的准备工作,得到这三个东西就可以继续exe打包的工作了
在这里插入图片描述
运行exe4j,开始打包

如果有奇怪的报错,把刚才生成的jre删掉就行了,大概率是生成的jre或者之前有存在的jre有问题

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
高级选项这里进去后,勾选64位选项后返回到当前界面【连续返回好几次】,然后 - Next

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
启动或者退出,之后会弹一个保存配置的对话框,随你

到此,exe打包就完成了
在这里插入图片描述
不出意外的话,这个exe程序在你电脑上运行时没有问题的,发给别人就跑不起来,这里有两个东西要注意下

  1. 发给别人时,不能只发exe文件,还要连同myjre一起发过去,也就是将myjre和exe文件打成一个压缩包传给别人
  2. myjre只是jdk定制的jre,里面包含了jdk的一些工具库,但是并没有包含javafx的工具啊,所以还要把javafx-sdk里的bin复制到myjre/bin下,当然,大部分的文件是相同的,直接跳过就行,这样传给别人,就能跑起来了

还有一个,如果你的程序没有用到webkit和媒体相关的api,下面这两个不复制过去也是ok的
在这里插入图片描述
我没有复制这两个东西,程序跑起来是没问题的。

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一鱼浅游

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值