前言

GraalVM是一个高性能、云原生、支持多种语言的虚拟机。

GraalVM环境搭建分为两步:

1、下载配置GraalVM和下载native-image。

2,下载配置windows sdk和msvc。

GraalVM

下载配置GraalVM

  1. 进入到 GitHub 上的 GraalVM 发布存储库。选择适用于 Windows 的基于 Java 111719 的发行版,然后下载。我选择的是java17-22.3.0的。
  2. 将目录更改为要安装 GraalVM 的位置,然后将.zip存档文件移动到该目录。我这里是放在D:\JDK
  3. 将存档解压缩到文件系统。例如D:\JDK

配置环境变量

1
2
GRAALVM_HOME=D:\JDK\graalvm-ce-java17-22.3.0
JAVA_HOME=D:\JDK\graalvm-ce-java17-22.3.0

验证

1
2
3
4
D:\testNative>java -version
openjdk version "17.0.5" 2022-10-18
OpenJDK Runtime Environment GraalVM CE 22.3.0 (build 17.0.5+8-jvmci-22.3-b08)
OpenJDK 64-Bit Server VM GraalVM CE 22.3.0 (build 17.0.5+8-jvmci-22.3-b08, mixed mode, sharing)

安装native-image

官网教程:gu install native-image。但这在windows可能会无法识别gu命令。

在GitHub的一些issue上有相关解决方案:使用全路径gu.cmd

1
2
3
4
5
6
C:\Windows\System32>gu.cmd install native-image

Downloading: Component catalog from www.graalvm.org
Processing Component: Native Image
Downloading: Component native-image: Native Image from github.com
Installing new component: Native Image (org.graalvm.native-image, version 22.3.0)

下载配置sdk和msvc

进入visual studio(社区版)下载页:传送门,下载后安装

注意版本更新

  • 如果当前vs是2022的,那么msvc也选择2022的。如果vs是其他版本那msvc也一并选择对应的
  • windows sdk也选择和系统对应的(10/11)
  • msvc有多个版本,我这里直接选择latest的

如果选错了,再进入安装器,点击修改,重新下载安装单个组件即可。

配置环境变量

  • PATH中添加vs目录下msvc的bin目录
1
2
# D:\Software\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.37.32822 是我的vs安装目录
D:\Software\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.37.32822\bin\Hostx64\x64
  • 配置LIBINCLUDE环境变量

接下来是最容易错的一步,windows sdk各个版本安装目录不同,最稳妥的方法是进入注册表查看,到底安装在哪里,搜索注册表进入注册表编辑器。

注册表路径:计算机\HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Microsoft SDKs\Windows\v10.0

1
2
3
4
5
6
# 注意:
# 1.替换`C:\Program Files (x86)\Windows Kits\10\` 为InstallationFolder指向的路径
# 2.`10.0.22621.0` 版本号需要自行更改
# 3.`D:\Software\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.37.32822\` msvc路径需要自行更改
INCLUDE=C:\Program Files (x86)\Windows Kits\10\Include\10.0.22621.0\ucrt;C:\Program Files (x86)\Windows Kits\10\Include\10.0.22621.0\um;C:\Program Files (x86)\Windows Kits\10\10\Include\10.0.22621.0\shared;D:\Software\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.37.32822\include;
LIB=C:\Program Files (x86)\Windows Kits\10\Lib\10.0.22621.0\um\x64;C:\Program Files (x86)\Windows Kits\10\Lib\10.0.22621.0\ucrt\x64;D:\Software\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.37.32822\lib\x64;

最终验证

新建一个 HelloWorld.java

1
2
3
4
5
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, World!");
}
}

编译为字节码,然后构建本机可执行文件

1
2
javac HelloWorld.java
native-image HelloWorld

执行

native-image命令将会在当前工作目录中生成可执行文件

1
2
3
helloworld.exe

Hello, World!

springboot验证

测试代码地址:https://github.com/behappy-project/behappy-redirect

执行命令进行编译:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# mvn -Pnative native:compile

......
Produced artifacts:
D:\Project\behappy-project\behappy-redirect\target\behappy-redirect.build_artifacts.txt (txt)
D:\Project\behappy-project\behappy-redirect\target\behappy-redirect.exe (executable)
========================================================================================================================
Finished generating 'behappy-redirect' in 1m 31s.
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 03:16 min
[INFO] Finished at: 2023-08-21T17:10:23+08:00
[INFO] ------------------------------------------------------------------------