zoukankan      html  css  js  c++  java
  • 【转】Windows下使用Graalvm将Javafx应用编译成exe

    Windows下使用Graalvm将Javafx应用编译成exe

    1 背景

    image

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

    clip_image004

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

    C:javagraalvm-ce-java11-20.2.0

      然后设置windows环境变量:

    GRAALVM_HOME=C:javagraalvm-ce-java11-20.2.0
    
    JAVA_HOME=C:javagraalvm-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的版本匹配,否则会报错,类似于:

    clip_image006

    3.3 安装vs2019社区版

    下载地址

    https://visualstudio.microsoft.com/zh-hans/vs/

    安装的注意事项

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

    测试

    打开命令行,执行:

    # 初始化x64的编译环境。
    call "C:Program Files (x86)Microsoft Visual Studio2019CommunityVCAuxiliary Buildvcvars64.bat”

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

    clip_image008

    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 Studio2019CommunityVCAuxiliaryBuildvcvars64.bat"
    # 编译。它相当于client:compile + client:link mvn clean client:build
    复制代码

    输出:

    clip_image010

      编译的时间有点长,请耐心等待。本机编译耗时230秒。

    注意事项

    • 必须保证有足够的剩余内存,最好在5GB以上,否则有可能会报内存不足的错误。
    • 暂时关闭安全软件。安全软件会拖慢编译速度,生成的exe文件可能被误删。

    4 效果

      进入 HelloFx/target/client/x86_64-windows目录,可以看到一个名为HelloFx.exe的文件。如下图所示:

    clip_image012

    4.1 启动速度

      双击HelloFx.exe执行,可以发现启动速度非常快,达到了秒开的程度。如下图所示:

    clip_image013

    4.2 程序大小

      可以看到,程序大小约为58MB。

      用7zip压缩后,仅为13MB,分发给用户非常方便。

      如果在链接时排除掉一些不用的内容,体积可以进一步减小。

    5 局限和展望

      目前它仅支持windows 64-bit的编译,32-bit暂时不支持。不过随着版本的演进,未来可能会支持。

      如果近期就想要32-bit的,可以尝试下载Graalvm的源码,自己编译一个32-bit的版本。

    6 参考资料

  • 相关阅读:
    Metro-Ural119递推
    Flags-Ural1225简单递推
    Candies-POJ3159差分约束
    Is the Information Reliable? -POJ2983差分约束
    MPI Maelstrom
    Codeforces Round #342 (Div. 2)-B. War of the Corporations
    Codeforces Round #342 (Div. 2)-A. Guest From the Past
    Vim升华之树形目录插件NERDTree安装图解
    The Same Game-POJ1027模拟
    Flesch Reading Ease -POJ3371模拟
  • 原文地址:https://www.cnblogs.com/qiyebao/p/14351604.html
Copyright © 2011-2022 走看看