原文转自:https://lingkang.top/archives/greaalvm%E7%BC%96%E8%AF%91springboot
https://lingkang.top/archives/greaalvm%E7%BC%96%E8%AF%91springboot
window下使用GreaalVM编译springboot存在很多坑,主要是配置MSVC
可以参考spring官网:https://docs.spring.io/spring-native/docs/0.12.1/reference/htmlsingle/#_build_the_native_application_2
下载GreaalVM地址:https://github.com/graalvm/graalvm-ce-builds/releases
2022年11月20日最新版22.3.0,所属的openjdk版本是17.0.5
解压到C:\Program Files\graalvm-ce-java17-22.3.0
配置它到环境变量:(替换原jdk环境变量)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-k1jZs0aa-1668900865618)(/upload/2022/11/image-1668899567832.png)]
version
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZAoXRcJE-1668900865620)(/upload/2022/11/image-1668899599488.png)]
安装编译工具
gu install native-image
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xF1oqwjl-1668900865620)(/upload/2022/11/image-1668900176637.png)]
我已经安装好了

springboot项目是2.7.5,使用IDEA创建springboot项目,删除测试文件。注意某些依赖无法打包源生
Maven如下:
4.0.0 org.springframework.boot spring-boot-starter-parent 2.7.5 top.lingkang graalvm-demo 0.0.1-SNAPSHOT graalvm-demo graalvm-demo 17 0.12.1 org.springframework.boot spring-boot-starter-web org.springframework.experimental spring-native ${spring-native.version} org.springframework.boot spring-boot-maven-plugin org.projectlombok lombok ${repackage.classifier} paketobuildpacks/builder:tiny true org.springframework.experimental spring-aot-maven-plugin ${spring-native.version} test-generate test-generate generate generate spring-releases Spring Releases https://repo.spring.io/release false spring-releases Spring Releases https://repo.spring.io/release false native exec 0.9.13 org.junit.platform junit-platform-launcher test org.graalvm.buildtools native-maven-plugin ${native-buildtools.version} true test-native test test build-native package build
编写一个controller
package top.lingkang.graalvmdemo.controller;import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;import java.text.SimpleDateFormat;
import java.util.Date;/*** @author lingkang* Created by 2022/11/20*/
@RestController
public class WebController {private SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");@GetMapping("/")public Object index(){return "hi, "+format.format(new Date());}
}
运行项目无任何报错
在window下,打包钱需要配置MSVC。
我电脑中已经下载了 Visual Studio 2022 并且已经安装了最新的MSVC

接下来配置MSVC
找到MSVC的安装目录,我的被VS安装到了 C:\Program Files\Microsoft Visual Studio\2022\Professional\VC\Tools\MSVC\14.31.31103
配置LIB环境变量
C:\Users\Administrator>echo %LIB%
C:\Program Files (x86)\Windows Kits\10\Lib\10.0.19041.0\um\x64;C:\Program Files (x86)\Windows Kits\10\Lib\10.0.19041.0\ucrt\x64;C:\Program Files\Microsoft Visual Studio\2022\Professional\VC\Tools\MSVC\14.31.31103\bin\Hostx64\x64;C:\Program Files\Microsoft Visual Studio\2022\Professional\VC\Tools\MSVC\14.31.31103\lib\x64;
你可以复制替换系统版本和MSVC位置
其中10.0.19041.0为你的window版本,可以去到对应路径C:\Program Files (x86)\Windows Kits\10中查找

配置INCLUDE环境变量
C:\Users\Administrator>echo %INCLUDE%
C:\Program Files (x86)\Windows Kits\10\Include\10.0.19041.0\ucrt;C:\Program Files (x86)\Windows Kits\10\Include\10.0.19041.0\um;C:\Program Files (x86)\Windows Kits\10\Include\10.0.19041.0\shared;C:\Program Files\Microsoft Visual Studio\2022\Professional\VC\Tools\MSVC\14.31.31103\include
你可以复制替换系统版本和MSVC位置
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2P8702MF-1668900865623)(/upload/2022/11/image-1668899880117.png)]

执行打包命令
mvn -Pnative -DskipTests package
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4OOMjRiD-1668900865623)(/upload/2022/11/image-1668899963838.png)]
打包期间发现电脑有些卡,等待几分钟
打包成功:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0mrPbazt-1668900865624)(/upload/2022/11/image-1668900016493.png)]
不过大小是不是太大了?
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OFc4EzUk-1668900865624)(/upload/2022/11/image-1668900067384.png)]
打包后运行
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fqI5U0Wf-1668900865624)(/upload/2022/11/image-1668900351467.png)]
对比未打包运行
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Tl5ZDSed-1668900865625)(/upload/2022/11/image-1668900453723.png)]
