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 的任意路径中输入以下命令应该能看到上面设置的路径。
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 进行本地安装。
其中,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。
建一个简单的 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 文件。
输入如下命令使用 MSVS 的环境。这个命令是用于设置临时设置与 MSVS 相关的环境变量,因此每次总是要输。
【踩坑提醒】
如果不输入以上命令,后面运行 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 位),以上的命令为:
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。
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。
使用如下命令可以将 JAR 转化为 exe。但是,这样转化出来的 EXE 仍然依赖于 JDK,所以一般意义不大。
使用如下命令可以产生无 JDK 依赖的 EXE。



