使用native-image本地镜像工具编译SpringBoot环境镜像

本文详细介绍了如何在Windows环境下,通过MSVC安装VisualStudio,安装GraalVM并验证其安装,以及使用native-image工具编译SpringBoot项目并进行AOT处理,以实现跨平台的快速运行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

MSVC环境安装

要想在未安装Java以及其他开发环境的Windows平台运行SpringBoot项目,MSVC环境是必要的

下载VisualStudio(不是VSCode)

这里我已经下载完毕,如果已经下载过可以在Windows搜索栏搜索Visual Studio Installer
打开后在下面界面选择修改来选择新工具安装
在这里插入图片描述

打开会出现以下界面(没有安装VS自行搜索Visual Studio下载专业或者社区版安装时也会出现此节面)
在这里插入图片描述
选择使用C++的桌面开发 通用Windows平台开发这两个组件
在这里插入图片描述

切记:要记住你的安装位置(VC安装路径会显示在安装界面下方)

检查本地工具安装情况

上述过程安装完毕后,在Windows搜索栏中搜索Native Tools会出现以下两个命令行工具
在这里插入图片描述

这里使用X64 Native Tools Command即64位,X86是32位环境

安装GraalVM

本次安装GraalVM社区版本即可

GraalVM安装

GraalVM下载链接
GraalVM-ce-java17-windows-X64-22.3.2

注意,SpringBoot3必须使用22.3以上版本

下载完成解压到你要安装的目录(随意,路径不要带中文)
随后在系统环境变量中将JAVA_HOME值改为GraalVM安装路径(没有就创建一个JAVA_HOME)

验证安装

如果安装正确,在powershell或者cmd中输入java -version应当显示
在这里插入图片描述

测试gu工具

在cmd或者powershell输入gu --help应当有帮助提示输出
Windows上由于gu会与Windows命令Get-Unique冲突,所以如果提示找不到可以用**gu.cmd **代替gu
在这里插入图片描述

本地镜像工具安装

接下来安装native-image工具
native-image 下载:native-image-installable-svm-java17-windows-amd64-22.3.2.jar

之后打开powershell或cmd命令行工具
使用以下命令定位到刚刚下载的jar包所在目录
cd native-imagejar包下载目录

使用gu install --file native-image工具jar包名称安装(gu用不了用gu.cmd)

验证native-image工具安装

重启命令行输入native-image --help应当能输出命令帮助信息
在这里插入图片描述

添加系统环境变量

打开系统环境变量编辑
修改或添加以下路径
Path:
添加你的VC安装路径\App\VC\Tools\MSVC\14.37.32822\bin\Hostx64\x64
14.37.32822是版本号,每个人可能不一样找到你的具体目录拷贝进去
JAVA_HOME:
修改为GraalVM安装路径,如果你之前没有安装其他Java环境,需要在Path中添加%JAVA_HOME%\bin
INCLUED
创建INCLUDE系统环境变量
添加:

  • 自己的VC安装目录\App\VC\Tools\MSVC\14.37.32822\include;
  • C:\Program Files (x86)\Windows Kits\10\Include\10.0.22621.0\shared;
  • 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\Include\10.0.22621.0\winrt;

去你自己对应目录找,找全后一起拼接着粘贴进去,五个路径之间用;分隔开

LIB
创建LIB系统环境变量
添加:

  • 自己的VC安装目录\App\VC\Tools\MSVC\14.37.32822\lib\x64;
  • C:\Program Files (x86)\Windows Kits\10\Lib\10.0.22621.0\ucrt\x64;
  • C:\Program Files (x86)\Windows Kits\10\Lib\10.0.22621.0\um\x64

和上面一样去自己对应目录找,找全后一起拼接着粘贴进去,五个路径之间用;分隔开

准备完毕

至此环境安装全部完毕,如果你需要其他的版本
可在GraalVM的GitHub页面下载:GraalVM-GitHub
之前的GraalVM和native-image均来自于此

创建示例SpringBoot项目

这里使用IDE的Spring脚手架创建
在这里插入图片描述
JDK一定要选择GraalVM

在这里插入图片描述
SpringBoot版本一定是3以上版本,依赖项选择GraalVM Native Support(必选) 和 你需要的依赖,这里我选择一个Web

项目结构

出了启动类以外简单的写一个controller模拟一个简单功能演示即可
在这里插入图片描述
![在这里插入图片描述](https://img-blog.csdnimg.cn/5a65317097c44e208a239450e51d4f6a.png

@RestController
public class HelloController {
    @RequestMapping("/hello")
    public String hello(){
        return "Hello GraalVM Native";
    }
}

发送hello请求返回一句Hello GraalVM Native

使用native-image打包

使用maven执行clean 和 package打包
在target目录下生成了一个项目的jar包
在这里插入图片描述

AOT处理

由于SpringBoot底层用到了大量反射,因此直接进行提前编译时不可行的,因为反射是动态的,程序在执行过程中才会决定执行什么模块,因此对于SpringBoot项目需要做额外处理。

SpringBoot脚手架在创建项目时导入了一个springboot:process-aot模块用于提前对反射模块进行处理
在这里插入图片描述
双击执行此模块即可对其进行处理
完成后target目录会生成用于AOT的预处理文件

接下来使用maven模块中项目创建自动导入的native:build进行打包
在这里插入图片描述

这里打包会出现问题
在这里插入图片描述
这是一个Bug
所以我们使用刚刚使用VC安装的native tools进行操作
右键使用管理员身份打开x64 Native Tools Command
在这里插入图片描述
接着cd 命令定位到你的项目路径下
由于这是cmd命令行,初始在C盘符,如果你项目在D盘是cd不过去的
先执行D:切换到D盘再cd就行了
在这里插入图片描述

使用mvn -Pnative native:compile执行编译
此时又会遇到问题
在这里插入图片描述
这是因为native插件的盘符路径转换问题
再idea中找到target目录下的tem目录会发现生成的args文件,每次执行编译都会生成一个args文件,任意打开一个
在这里插入图片描述
在这里插入图片描述
发现是路径出了问题,IDEA中使用Ctrl + R 将所有\\替换为/
在这里插入图片描述
复制修改后文件的文件名
在这里插入图片描述
回到x64 Native Tools Command命令行使用native-image命令打包
执行native-image @target\tmp\native-image-4652055330304047537.args
native-image-4652055330304047537.args替换为你自己修改过的文件名称

注意@target\tmp\xxx.args是路径,因为之前已经cd到项目路径所以是target\tmp\xxx.args,如果你已经再target目录则是tmp\xxx.args,如果在其他目录你可以用绝对路径

开始打包
在这里插入图片描述

在这里插入图片描述
显示Finished generating就算成功了
在target目录下会生成一些obj之类的链接文件和一个项目名称.exe文件

你可以选择在资源管理器中打开
在这里插入图片描述
随后在资源管理器地址栏直接输入powershell打开命令行
在这里插入图片描述

使用.\exe文件名称运行(直接双击是打不开的)

在这里插入图片描述
可以看到BootAotTestApplication in 0.062 seconds (process running for 0.065)
启动运行速度非常快

测试

在地址栏目输入项目启动的服务地址,我使用默认的https://localhost:8080/hello测试

在这里插入图片描述

使用native-image打包的exe文件可在任何Windows平台设备运行,不论是否安装运行环境

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

HashMap223

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值