【折腾GraalVM一】Windows下GraalVM的安装、Demo测试与踩坑

前言

本系列写于2023年9月

如果英文和网络条件允许,安装各类软件环境还是建议查看官网文档,网上的「二手博客」更像是个人经验总结,时效性太强,仅供参考

GraalVM的官方网站

https://www.graalvm.org/

总体而言,GraalVM也是一个JDK,基本上按照JDK的安装方法来就行,另外就是需要安装Visual Studio

下载并解压GraalVM的Windows zip包

https://www.graalvm.org/downloads/

在这里插入图片描述

由于我写的都是Windows平台下的博客,故下载Windows平台的zip包
之后解压缩到一个合适的位置即可

设置JAVA_HOME与PATH

目前确实有很多程序逐渐不再依赖JAVA_HOME这个环境变量了
但是GraalVM除外,根据

https://www.graalvm.org/latest/docs/getting-started/windows/

很明显,JAVA_HOME还是需要设置的

确保Visual Studio相关组件的存在(Native Tools Command Prompt)

这部分直接参照下方链接即可

https://www.graalvm.org/latest/docs/getting-started/windows/#install-visual-studio-build-tools-and-windows-sdk

如果电脑里面安装过 Visual Studio,确保能打开 Native Tools Command Prompt for VS XXXX 这样的一个黑框框老式 cmd 命令行,有关 native-image 编译为 exe 的命令只能在这里面运行
x64 Native Tools Command Prompt for VS 2022
在这里插入图片描述

Demo测试

首先需要确保正在使用的是 GraalVM,命令行输入

java --version

确保打印出来的结果里面有 GraalVM 的字眼
在这里插入图片描述

之后写一个 HelloWorld

public class Hello {
    public static void main(String[] args) {
        System.out.println("Hello GraalVM");
    }
}

之后编译为字节码,命令行输入

javac Hello.java

这样应该会在当前目录生成一个叫 Hello.class 的文件
之后尝试 native-image 编译为 exe

注意,下面的这条命令需要在 Native Tools Command Prompt 中运行,不能在 PowerShell 里面直接运行

native-image Hello

最后运行编译生成的 hello.exe,应该能看到打印出的 Hello GraalVM 字样
在这里插入图片描述

以下是执行 native-image 命令后整个流程的长截图
在这里插入图片描述值得注意的是,在我的机器上(Lenovo Legion R7000P 2021H, AMD Ryzen 7 5800H, 16GB RAM),编译打包一个 HelloWorld 就已经耗费了最大 3.19GB 内存,而且编译时间达到了 42.9s,足以说明编译 native-image 需要很长的时间和很大的系统资源开销
更新:GraalVM JDK 20(java 20.0.2 2023-07-18)的版本,做了不少优化,编译 HelloWorld 所占的峰值内存缩减到了 1.38GB,编译时间也降低到了 21.6s,看来新版的 GraalVM 还是有优势的

踩坑记录

1. returned non-zero result

  • 可能原因1 项目路径包含了一些特殊字符或中文字符,移动一下项目路径就好
    https://github.com/spring-attic/spring-native/issues/1534
  • 可能原因2 需要在 MSVC 的工具 Native Tools Command Prompt for VS 里面运行指令
    https://stackoverflow.com/questions/73905381/failed-to-compile-spring-native-on-graalvm-with-the-message-native-image-cmd-re

2. gu.cmd not found

可能是因为 Path 没包含 GraalVM 的路径

另外,如果是一个说 gu 安装失败的报错,尝试自己手动安装一下 native-image 应该就好
应该是运行 gu install native-image 这个命令即可,参考 https://segmentfault.com/a/1190000039778813

3. GraalVM Native Image for JDK 20 requires Visual Studio 2022 version 17.1.0 or later

这说明安装的 GraalVM JDK 比较新,GraalVM JDK 20 需要 Visual Studio 2022 v17.1 或更高的版本,没啥好办法,安装新版的 Visual Studio 就是了

我就是想在PowerShell里运行native-image!

前面提到了“有关 native-image 编译为 exe 的命令只能在 MSVC 命令行里面运行”,但如果就是想在 PowerShell 里面直接运行,也不是不行
主要是要解决环境变量的问题,装完 Visual Studio 之后,环境变量里面并没有 VC++ 编译器相关的环境变量,所以直接运行 native-image 必然会出问题
一番探索后,结合 午秋 撰写的这篇博客

记录一次在PowerShell下进入VC编译环境的探索过程 https://blog.csdn.net/wuqiu/article/details/104563185

最终在 PowerShell 中先运行以下三条命令,之后就可以运行 native-image 了
注意第一行的 $vsPath 变量的值应该改为自己的 Visual Studio 所在的位置,后面的-arch=x64 -host_arch=x64参数也可能要根据实际情况进行修改

$vsPath="C:\Program Files\Microsoft Visual Studio\2022\Community";
Import-Module ("$vsPath\\Common7\\Tools\\Microsoft.VisualStudio.DevShell.dll");
Enter-VsDevShell -VsInstallPath "$vsPath"  -SkipAutomaticLocation -DevCmdArguments "-arch=x64 -host_arch=x64";
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值