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上下载Graalvm社区版,可以看到有很多下载项:

  我们选择graalvm-ce-java11-windows-amd64-20.2.0.zip。下载完毕后,将它内容解压至:

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://github.com/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://visualstudio.microsoft.com/zh-hans/vs/

 

安装的注意事项

  • 工作负载请选择:使用C ++桌面开发;
  • 语言包请选择:英语。
  • 路径请使用默认的。
  • 详细的安装过程就不赘述了,请参考教程:《安装VS2019(C/C++)详细教程

 

测试

打开命令行,执行:

# 初始化x64的编译环境。
call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\ Build\vcvars64.bat”

 

如果出现以下的输出,就说明编译环境是正常的:

 

3.4 示例代码

下载

git clone https://github.com/gluonhq/client-samples.git

 

说明:

  • 本示例由Gluon公司提供的,Gluon公司是OpenJFX项目和Graalvm项目的贡献者。
  • 示例中使用一个名为client-maven-plugin的插件,它封装了native-image的相关命令,简化了打包操作。
  • client-maven-plugin插件文档:https://docs.gluonhq.com/#_the_gluon_client_plugin_for_maven

 

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 参考资料

给TA买糖
共{{data.count}}人
人已赞赏
经验教程

痞子衡嵌入式:MCUBootUtility v3.0发布,开始支持LPC, Kinetis啦

2021-1-10 20:39:13

经验教程

ssh问题之复盘

2021-1-10 20:39:15

⚠️
免责声明:根据《计算机软件保护条例》第十七条规定“为了学习和研究软件内含的设计思想和原理,通过安装、显示、传输或者存储软件等方式使用软件的,可以不经软件著作权人许可,不向其支付报酬。”您需知晓本站所有内容资源均来源于网络,仅供用户交流学习与研究使用,版权归属原版权方所有,版权争议与本站无关,用户本人下载后不能用作商业或非法用途,需在24个小时之内从您的电脑中彻底删除上述内容,否则后果均由用户承担责任;如果您访问和下载此文件,表示您同意只将此文件用于参考、学习而非其他用途,否则一切后果请您自行承担,如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。 本站为个人博客非盈利性站点,所有软件信息均来自网络,所有资源仅供学习参考研究目的,并不贩卖软件,不存在任何商业目的及用途,网站会员捐赠是您喜欢本站而产生的赞助支持行为,仅为维持服务器的开支与维护,全凭自愿无任何强求。本站部份代码及教程来源于互联网,仅供网友学习交流,若您喜欢本文可附上原文链接随意转载。
无意侵害您的权益,请发送邮件至 momeis6@qq.com 或点击右侧 私信:momeis 反馈,我们将尽快处理。
0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
今日签到
有新私信 私信列表
搜索