栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

使用 GraalVM 将基本的 Java 项目打包成 exe

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

使用 GraalVM 将基本的 Java 项目打包成 exe

使用 GraalVM 将基本的 Java 项目打包成 exe

GraalVM 的环境搭建使用 GraalVM 将基本的 Java 项目打包成 exe使用 GraalVM 将 JAR 转化为 exe

GraalVM 的环境搭建

    GraalVM 有两种版本,Community 和 Enterprise。其中,前者对应于 OpenJDK,后者对应 Oracle JDK。需要根据自己的需要进行选择,本文以 GraalVM Enterprise 21.3.0 为例。

    GraalVM 版本选择网址:https://www.graalvm.org/downloads/

    下载 GraalVM Enterprise 21.3.0 需要进入 Oracle 官网,网址:https://www.oracle.com/downloads/graalvm-downloads.html?selected_tab=1

    先下载 Oracle GraalVM Enterprise Edition Core。下载完成之后,应该会得到一个 zip 压缩包。

    再在刚才的页面下载 Oracle GraalVM Enterprise Edition Native Image。这次得到的应该是一个 JAR 包。

    将前面的 zip 压缩包置入自己喜欢的文件夹下解压,解压得到的就是 GraalVM 程序文件。与安装 JDK 时类似,将含 bin 的目录作为 GraalVM 的安装目录。设环境变量如下:

    变量名:ORACLE_GRAALVM_HOME

    变量值:C:Program FilesJavagraalvm-ee-java17-21.3.0

    变量名:GRAALVM_HOME

    变量值:%ORACLE_GRAALVM_HOME%

    变量名:Path

    变量值:%GRAALVM_HOME%bin

    如果上面的环境变量设置成功,在 CMD 的任意路径中输入以下命令应该能看到上面设置的路径。

    where java

    where gu

    C:>where java
    C:Program FilesJavagraalvm-ee-java17-21.3.0binjava.exe
    
    C:>where gu
    C:Program FilesJavagraalvm-ee-java17-21.3.0bingu.cmd
    

    安装 Native Image 包。Native Image 包就是前面下载的 JAR 包。输入以下命令对 Native Image 进行本地安装。

    gu -L install Native Image 的 JAR 包路径

    其中,Native Image 的 JAR 包路径 要替换成实际的路径。

    GraalVM 的运行需要 Visual Studio 中的 MSVS 的支持,因此需要下载 Visual Studio。编写本博客时,笔者下载的是 Microsoft Visual Studio Enterprise 2022 (64 位)。

    Visual Studio 下载网址:https://visualstudio.microsoft.com/zh-hans/vs/

    现在,Visual Studio 在官网上只会提供在线安装包。下载完在线安装包后,选择安装含 MSVS 的选项。

    至此,GraalVM 的运行环境已经搭成。下面将开始使用 GraalVM 将基本的 Java 项目打包成 exe。

使用 GraalVM 将基本的 Java 项目打包成 exe

    建一个简单的 Java 项目。此项目的路径中不能有中文,否则后面 GraalVM 运行时会报错。

    package demo;
    
    public class OriginJava {
        public static void main(String[] args) {
            System.out.println("Hello, world.");
        }
    }
    

    制作 .class 文件,因为 GraalVM 只能直接对 .class 文件进行操作。

    制作 .class 文件的方法有很多,这里只举一例。借助于 Java 命令 javac。先打开 CMD 进入上述 Java 项目的包的根目录,也就是文件夹 demo 所在的目录。然后输入如下命令制作 .class 文件。

    javac 包名/类名

    输入如下命令使用 MSVS 的环境。这个命令是用于设置临时设置与 MSVS 相关的环境变量,因此每次总是要输。

    call "vcvars64.bat 的路径"


    【踩坑提醒】

      如果不输入以上命令,后面运行 native-image 时会有如下报错:

    Error: Default native-compiler executable 'cl.exe' not found via environment variable PATH
    Error: To prevent native-toolchain checking provide command-line option -H:-CheckToolchain
    Error: Use -H:+ReportExceptionStackTraces to print stacktrace of underlying exception
    [demo.hello:10212]      [total]:   3,021.75 ms,  0.96 GB
    # Printing build artifacts to: D:XXX.txt
    Error: Image build request failed with exit status 1
    

    vcvars64.bat 提供了 MSVS 的运行环境。虽然也可以通过设置 MSVS 的环境变量来代替,不过这样要设置的环境变量会有很多。对于笔者的 Microsoft Visual Studio Enterprise 2022 (64 位),以上的命令为:

    call "C:Program FilesMicrosoft Visual Studio2022EnterpriseVCAuxiliaryBuildvcvars64.bat"

    D:OriginJavasrc>call "C:Program FilesMicrosoft Visual Studio2022EnterpriseVCAuxiliaryBuildvcvars64.bat"
    **********************************************************************
    ** Visual Studio 2022 Developer Command prompt v17.0.4
    ** Copyright (c) 2021 Microsoft Corporation
    **********************************************************************
    [vcvarsall.bat] Environment initialized for: 'x64'
    

    在 .class 的包的根路径中输入以下命令制作 EXE。

    native-image 包名.类名

    D:OriginJavasrc>native-image demo.OriginJava
    [demo.originjava:4128]    classlist:   1,950.10 ms,  0.96 GB
    [demo.originjava:4128]        (cap):   1,737.90 ms,  0.96 GB
    [demo.originjava:4128]        setup:   4,282.33 ms,  0.96 GB
    [demo.originjava:4128]     (clinit):     162.30 ms,  2.34 GB
    [demo.originjava:4128]   (typeflow):   2,867.26 ms,  2.34 GB
    [demo.originjava:4128]    (objects):   5,915.14 ms,  2.34 GB
    [demo.originjava:4128]   (features):   1,771.20 ms,  2.34 GB
    [demo.originjava:4128]     analysis:  11,311.80 ms,  2.34 GB
    [demo.originjava:4128]     universe:   1,424.64 ms,  2.35 GB
    [demo.originjava:4128]      (parse):     711.20 ms,  2.35 GB
    [demo.originjava:4128]     (inline):   1,436.68 ms,  2.33 GB
    [demo.originjava:4128]    (compile):  19,422.42 ms,  2.82 GB
    [demo.originjava:4128]      compile:  22,571.05 ms,  2.82 GB
    [demo.originjava:4128]        image:   1,395.47 ms,  2.82 GB
    [demo.originjava:4128]        write:     753.49 ms,  2.82 GB
    [demo.originjava:4128]      [total]:  43,933.93 ms,  2.82 GB
    # Printing build artifacts to: D:OriginJavasrcdemo.originjava.build_artifacts.txt
    

    可以看出,当前目录下已经生成了一个 EXE 文件,可直接运行。

使用 GraalVM 将 JAR 转化为 exe

    GraalVM 还可以将 JAR 转化为 exe。

    使用如下命令可以将 JAR 转化为 exe。但是,这样转化出来的 EXE 仍然依赖于 JDK,所以一般意义不大。

    native-image -jar JAR 包的路径

    使用如下命令可以产生无 JDK 依赖的 EXE。

    native-image -jar -no-fallback JAR 包的路径

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/704314.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号