# 【Java】Graalvm 安装配置与 springboot3.0 尝鲜
# Graalvm 安装配置与 springboot3.0 尝鲜
Spring 团队一直致力于 Spring 应用程序的原生映像支持已有一段时间了。经过 3 + 年的孵化春季原生 Spring Boot 2 的实验性项目,原生支持将在 Spring Framework 6 和 Spring Boot 3 中正式发布!
# 安装 Graalvm
由于 spring-boot3.0 仅支持 22.3 版本,此处我们选择这个版本作为演示
Release GraalVM Community Edition 22.3.0 · graalvm/graalvm-ce-builds (github.com)
选择对应版本下载即可,此处我选择的是 windows 的 java 17 版本
解压之后我们可以得到这样的目录结构
1
| 前置路径\graalvm-ce-java17-22.3.0
|
# 配置 Graalvm 环境变量
配置变量到 GRAALVM_HOME``你的解压路径
在中添加 Path``%GRAALVM_HOME%\bin
确定保存
# 安装成功
打开控制面板输入命令 Java -version
可以看到显示了我们刚刚安装的 GraalVM 的信息
输入命令 gu
可以看见命令也能正常使用 gu
# 安装 native-image
控制台输入命令即可 gu install native-image
但是可能会出现以下错误
解决方案
在 github 上下载对应版本的 native-image 安装包进行本地安装
还是熟悉的地址:
Release GraalVM Community Edition 22.3.0 · graalvm/graalvm-ce-builds (github.com)
下拉,找到与你版本对应的安装包 native-image
控制台输入命令如图所示 gu install -L 你的下载位置
# 安装成功
控制台输入如图所示 gu list
可以看见 native-image 的版本信息,说明安装成功
# 配置 msvc 环境
安装 vs2019 及以上版本
安装时确保勾选了以上两个选项
# 环境变量
在 Path 中配置 D:\vs2022\VC\Tools\MSVC\14.29.30133\bin\HostX64\x64D:\vs2022\VC\Tools\MSVC\14.29.30133\bin\HostX64\x64
配置环境变量 INCLUDE
C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\ucrt;
C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um;
C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\shared;
D:\vs2022\VC\Tools\MSVC\14.29.30133\include;
(vs2022 是我的安装路径)
配置环境变量 LIB
D:\vs2022\VC\Tools\MSVC\14.29.30133\lib\x64;
C:\Program Files (x86)\Windows Kits\10\Lib\10.0.18362.0\um\x64;
C:\Program Files (x86)\Windows Kits\10\Lib\10.0.18362.0\ucrt\x64;
# 运行 spring-boot3.0 测试项目
# 构建项目
引入 GraalVM Native 依赖,此次我们引入 Web 依赖用于测试
pom 文件如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84
| <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>3.0.0</version> <relativePath/> </parent> <groupId>com.fate</groupId> <artifactId>boot3</artifactId> <version>0.0.1-SNAPSHOT</version> <name>boot3</name> <description>boot3</description> <properties> <java.version>17</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies>
<build> <plugins> <plugin> <groupId>org.graalvm.buildtools</groupId> <artifactId>native-maven-plugin</artifactId> <extensions>true</extensions> <executions> <execution> <id>build-native</id> <goals> <goal>compile-no-fork</goal> </goals> <phase>package</phase> </execution> <execution> <id>test-native</id> <goals> <goal>test</goal> </goals> <phase>test</phase> </execution> </executions> <configuration>
<mainClass>com.fate.boot3.Boot3Application</mainClass>
<imageName>boot-test</imageName> <buildArgs> <buildArg>--verbose</buildArg> </buildArgs> </configuration> </plugin> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <excludes> <exclude> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </exclude> </excludes> </configuration> </plugin> </plugins> </build>
</project>
|
# 测试代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| package com.fate.boot3.controller;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController;
@RestController @RequestMapping("test") public class TestController { @GetMapping public String test(){ return "test boot3.0"; } }
|
# 测试运行
# 打包编译
点击 maven 侧边栏插件,如图所示
或者直接运行 maven 命令 mvn -Pnative package
开始漫长的编译打包,即使是这样简单的项目也需要好几分钟,并且期间你的电脑也会很卡,
可以看见,耗时近三分钟,编译之后我们发现,target 目录下变得不一样了,生成了 exe 可执行文件,当然你也可能注意到了 spring-aot 这个文件夹,虽然我还不是很了解 aot, 但是很明显,大的来了
直接在 cmd 中运行
# 大功告成
# 关于我
Brath 是一个热爱技术的 Java 程序猿,公众号「InterviewCoder」定期分享有趣有料的精品原创文章!
非常感谢各位人才能看到这里,原创不易,文章如果有帮助可以关注、点赞、分享或评论,这都是对我的莫大支持!