SpringBoot3 + GraalVm原生镜像 从环境安装到打包测试(超详细)

前言:

更快速、更智能、更精简。
GraalVM 是一个高性能 JDK,可提高基于 Java 和 JVM 的应用的性能并简化 Java 云原生服务的构建和运行。它提供优化的编译器,可以更快地生成代码并降低计算资源消耗,实现微服务即时启动。GraalVM 是 Java SE Universal Subscription 的一部分,无需额外付费;

官网:GraalVM | Oracle 中国

一、安装GraalVm

1、下载地址:

Release GraalVM for JDK 17 Community 17.0.9 · graalvm/graalvm-ce-builds · GitHub

2、下载后解压:

3、配置环境变量:

 1)新增JAVA17_GRAALVM_HOME: GraalVm 解压的路径

 2)更改JAVA_HOME的配置:%JAVA17_GRAALVM_HOME%

 3)  path的配置:%JAVA_HOME%\bin

4、 验证是否配置成功,执行操作java -vesion、 native-image --version、 gu list 如下图即graalvm 环境配置成功:  注意GraalVM for JDK 17 Community 17.0.9 版本这里没有安装native-image,应该是默认安装了,正常还需要安装native-image,见第5步的操作;

5、安装native-image 

1)在线安装:执行gu install native-image 命令安装即可, 由于网络原因,不具体执行展示了

2)离线安装:

1、以 GraalVM for JDK 17 Community 17.0.8 对应的23.0.1 版本为例, 地址:

Release GraalVM Community Components 23.0.1 · graalvm/graalvm-ce-builds · GitHub

找到 native-image-installable-svm-java17-windows-amd64-23.0.1.jar 下载

2、打开cmd,  进入 native-image-installable-svm-java17-windows-amd64-23.0.1.jar 下载的文件夹

执行:gu install -L  native-image-installable-svm-java17-windows-amd64-23.0.1.jar 安装即可

成功后,验证graalvm 环境配置是否成功见第4步

注意: 如graalvm 和native-image 版本不一致,会出现如下图的错误,找到对应的版本,重新安装即可;

二、安装visual Studio

注意: 下载安装vs, 因为在Windows上 使用native-image 打包需要c++环境,而VisualStudio 可以提供c++开发环境,所以我们要先下载安装好VisualStudio

1、下载

在线下载地址:Thank You for Downloading Visual Studio Community Editionhttps://visualstudio.microsoft.com/zh-hans/thank-you-downloading-visual-studio/?sku=Community&channel=Release&version=VS2022&source=VSLandingPage&cid=2030&passive=false

离线安装方法: 参考

创建脱机安装 - Visual Studio (Windows) | Microsoft Learn

2、 安装:我的 c 盘空间不够,所以改到了d 盘,建议安装在c盘;

选择c++的桌面开发、通用windows的平台开发, 右侧的可选项注意选择了windows 11 sdk(10.0.22621.0)

3、配置环境变量

VISUAL_STUDIO环境变量:visual studio 的安装路径
我的安装路径是:D:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.39.33519

Path环境变量:%VISUAL_STUDIO%\bin\Hostx64\x64

INCLUDE环境变量: 注意这里的10.0.22621.0 就是安装是你所选择的Windows sdk 的版本

%VISUAL_STUDIO%\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环境变量:

%VISUAL_STUDIO%\lib\x64;C:\Program Files (x86)\Windows Kits\10\Lib\10.0.22621.0\um\x64;C:\Program Files (x86)\Windows Kits\10\Lib\10.0.22621.0\ucrt\x64;

三、SpringBoot3 使用idea 打包测试

1、创建项目

2、引包

  <properties>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.0.5</version>
    </parent>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <configuration>
                    <skip>true</skip>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.graalvm.buildtools</groupId>
                <artifactId>native-maven-plugin</artifactId>
                <version>0.9.28</version>
                <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>
                    <!-- 镜像名称 -->
                    <imageName>graal-vm-demo</imageName>
                    <!-- 启动类 -->
                    <mainClass>com.zc.Application</mainClass>
                    <buildArgs>
                        <buildArg>--verbose</buildArg>
                    </buildArgs>
                    <skipNativeTests>true</skipNativeTests>
                    <verbose>true</verbose>
                </configuration>
            </plugin>
        </plugins>
    </build>

2、启动类

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

}

3、 controller

import org.springframework.web.bind.annotation.GetMapping
import org.springframework.web.bind.annotation.RequestMapping
import org.springframework.web.bind.annotation.RestController

@RestController
@RequestMapping("hello")
public class HelloController {

    @GetMapping("world")
    public String hello(){
        return "hello world";
    }
}

4、手动打包

5、命令打包: 

mvn clean
mvn compile
mvn spring-boot:process-aot
mvn -Pnative native:complie

7、打包成功

8、测试: 进入项目的target目录下,双击

四、graalvm 打包问题处理

1)出现'gu.cmd' tool wasn't found. This probably means that JDK at isn't a GraalVM distribution

是因为环境变量配置有问题,检查一下环境变量是否配置成功

2)出现的原因是springboot 和graalvm 版本不一致(springboot3.0 最低支持graalvm 22.3)升级graalvm 版本可解决

3)出现Execution of D:\GraalVM\graalvm-community-openjdk-17.0.8+7.1\bin\native-image.cmd @target\tmp\native-image-12800759822504058774.args returned non-zero result是因为没安装vs没有c++的环境,或者vs的环境配置不对造成的,检查一下重新安装vs,正确配置vs环境即可

4)出现下图这个问题可能是因为 org.graalvm.buildtools 插件版本低,我这里指定高版本解决了

<groupId>org.graalvm.buildtools</groupId>
<artifactId>native-maven-plugin</artifactId>
<version>0.9.28</version>
<extensions>true</extensions>

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值