1 背景
Gralvm是Oracle推出的一款新型虚拟机,其中一个吸引人的功能是将Java代码编译成各平台的本地代码,包括:linux、macOS、windows、iOS、android。
启动速度,对docker+微服务(云原生)应用和客户端应用非常有用。
2019年,我跟进了这个功能,并试图在windows上编译Javafx,但失败了。在搜索了stackoverflow和github后,我发现它只支持在linux上编译Javafx,并支持后续版本的windows。
最近看到了新的进展,发现Graavlm社区版从20.0开始.2(2020年8月)开始支持javaFx在windows本地编译。
现在让我们再试一次。
2 编译环境- Intel i7-4720HQ 16G
- Windows 10 64-bit
- VS2019社区
- Gralvm社区版 20.0.2
- JDK 11
Gralvm有两种版本,一种是oracle维护的企业版,另一种是github社区维护的社区版。我们选择社区版进行测试。
首先,在github上下载gralvm社区版,可以看到很多下载项:
我们选择gralvmmgral-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.0JAVA_HOME=C:\java\graalvm-ce-java11-20.2.0
3.2 安装GRalvm Native-image工具因为Native-Image工具和Gralvm是分开发行的,所以我们必须下载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
注意事项:
- 必须安装此工具,否则在编译过程中会报错。
- 工具的版本应该与Gralvm的版本相匹配,否则会报错,类似:
下载地址
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”
若出现以下输出,则编译环境正常:
下载
git clone https://github.com/gluonhq/client-samples.git
说明:
- 本例由Gluon公司提供,Gluon公司是OpenJFX项目和Gralvm项目的贡献者。
- 在示例中使用一个叫做client的例子-maven-plugin插件包装了native-image的相关命令,简化了包装操作。
- client-maven-plugin插件文档:https://docs.gluonhq.com/#_the_gluon_client_plugin_for_maven
执行命令
# 进入示例目录cd gluon-samples-master# 进入Hellofx示例目录 HelloFX# x64初始化编译环境 "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvars64.bat"# 编译。它相当于clientt:compile + client:linkmvn clean client:build
输出:
编译时间有点长,请耐心等待。编译这台机器需要230秒。
注意事项
- 必须确保有足够的剩余内存,最好超过5GB,否则可能会报告内存不足的错误。
- 暂时关闭安全软件。安全软件会减慢编译速度,生成的exe文件可能会被误删。
进入 HelloFx/target/client/x86_64-windows目录,可以看到一个叫HelloFx的目录.exe文件。如下图所示:
秒开程度。如下图所示:
可见程序大小约为58MB。
13MB,分发给用户非常方便。
如果在链接中排除一些不必要的内容,体积可以进一步减小。
5 局限和展望目前只支持windows 32-bit暂时不支持64-bit的编译。然而,随着版本的演变,未来可能会得到支持。
如果你最近想要32-bit,试着下载Gralvm的源代码,自己编译一个32-bit版本。
6 参考资料- 官网Gralvm
- Gralvm发行说明
- Gralvm开发路线图
- 为 JavaFX 应用生成 native image
本文是转载内容,我们尊重原作者对文章的权利。如有内容错误或侵权行为,请联系我们更正或删除文章。
