Windows下使用Graalvm将Javafx应用编译成exe
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Windows下使⽤Graalvm将Javafx应⽤编译成exe
1 背景
Graalvm是Oracle推出的⼀款新型虚拟机,其中⼀个吸引⼈的功能是:它可以将Java代码编译成各个平台的本地代码,这些平台包括:linux、macOS、windows、iOS、android。
这个功能可以极⼤地加快Java程序的启动速度,它对于docker+微服务(云原⽣)应⽤,以及客户端应⽤⾮常有⽤。
2019年的时候我就有跟进过这个功能,并尝试在windows上编译Javafx,不过失败了。
在查找了stackoverflow和github之后,发现它当时仅⽀持linux上编译Javafx,对wiindows的⽀持要到后续的版本。
最近我⼜看到新的进展,发现Graavlm社区版从20.0.2(2020年8⽉)开始⽀持javaFx在windows本地编译。
现在让我们再来尝试⼀下吧。
2 编译环境
Intel i7-4720HQ 16G
Windows 10 64-bit
VS2019社区
Graalvm社区版 20.0.2
JDK 11
3 步骤
3.1 安装graalvm
Graalvm有2种版本,⼀是oracle维护的企业版,⼆是github社区维护的社区版。
我们选择社区版来测试。
⾸先到github上下载,可以看到有很多下载项:
我们选择。
下载完毕后,将它内容解压⾄:
C:\java\graalvm-ce-java11-20.2.0
然后设置windows环境变量:
GRAALVM_HOME=C:\java\graalvm-ce-java11-20.2.0
JAVA_HOME=C:\java\graalvm-ce-java11-20.2.0
3.2 安装GRaalvm Native-image⼯具
由于Native-Image⼯具与Graalvm是分开发⾏的,所以我们还要下载Native-Imag⼯具。
下载地址为:
https:///graalvm/graalvm-ce-builds/releases/download/vm-20.2.0/native-image-installable-svm-java11-windows-amd64-20.2.0.jar
下载完毕后,执⾏:
gu -L install native-image-installable-svm-java11-windows-amd64-20.2.0.jar
注意事项:
必须安装这个⼯具,否则编译时会报错。
⼯具的版本要跟Graalvm的版本匹配,否则会报错,类似于:
3.3 安装vs2019社区版
下载地址
https:///zh-hans/vs/
安装的注意事项
⼯作负载请选择:使⽤C ++桌⾯开发;
语⾔包请选择:英语。
路径请使⽤默认的。
详细的安装过程就不赘述了,请参考教程:《》
测试
打开命令⾏,执⾏:
# 初始化x64的编译环境。
call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\ Build\vcvars64.bat”
如果出现以下的输出,就说明编译环境是正常的:
3.4 ⽰例代码
下载
git clone https:///gluonhq/client-samples.git
说明:
本⽰例由Gluon公司提供的,Gluon公司是OpenJFX项⽬和Graalvm项⽬的贡献者。
⽰例中使⽤⼀个名为client-maven-plugin的插件,它封装了native-image的相关命令,简化了打包操作。
client-maven-plugin插件⽂档:
3.5 编译
执⾏命令
# 进⼊⽰例⽬录
cd gluon-samples-master
# 进⼊HelloFx⽰例⽬录
cd HelloFX
# 初始化x64编译环境
call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvars64.bat"
# 编译。
它相当于client:compile + client:link
mvn clean client:build
输出:
编译的时间有点长,请耐⼼等待。
本机编译耗时230秒。
注意事项
必须保证有⾜够的剩余内存,最好在5GB以上,否则有可能会报内存不⾜的错误。
暂时关闭安全软件。
安全软件会拖慢编译速度,⽣成的exe⽂件可能被误删。
4 效果
进⼊ HelloFx/target/client/x86_64-windows⽬录,可以看到⼀个名为HelloFx.exe的⽂件。
如下图所⽰:4.1 启动速度
双击HelloFx.exe执⾏,可以发现启动速度⾮常快,达到了秒开的程度。
如下图所⽰:
4.2 程序⼤⼩
可以看到,程序⼤⼩约为58MB。
⽤7zip压缩后,仅为13MB,分发给⽤户⾮常⽅便。
如果在链接时排除掉⼀些不⽤的内容,体积可以进⼀步减⼩。
5 局限和展望
⽬前它仅⽀持windows 64-bit的编译,32-bit暂时不⽀持。
不过随着版本的演进,未来可能会⽀持。
如果近期就想要32-bit的,可以尝试下载Graalvm的源码,⾃⼰编译⼀个32-bit的版本。
6 参考资料
Graalvm。