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版本
解压之后我们可以得到这样的目录结构
前置路径\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文件如下
<?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/> <!-- lookup parent from repository -->
</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>
<!-- 生成的exe文件名-->
<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>
测试代码
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;
/**
* @author fate
* @date 2022/11/30
* @Description
*/
@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中运行
大功告成