前言:
更快速、更智能、更精简。
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%
- 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>
版权归原作者 面壁者-扬 所有, 如有侵权,请联系我们删除。