springboot3.0使用GraalVM

Windows 11上安装和使用GraalVM+SpringBoot3教程

spring官方有关GraalVm相关文档: GraalVM Native Image Support

安装GraalVM

下载压缩包

打开Releases · graalvm/graalvm-ce-builds · GitHub 按JDK版本下载GraalVM对应压缩包

配置环境变量

直接解压,并将环境变量中的JAVA_HOME的值替换为graalvm的安装目录

安装Visual Studio Build Tools

需要用到C语言环境,所以需要安装Visual Studio Build Tools

打开 Thank you for downloading Visual Studio - Visual Studio

进行下载,语言包只需要勾选英语。

测试

以管理员方式运行 X64 Native Tools Command Propmt

实在找不到这个的,可以直接在安装程序里启动

cli.exe
# 如果显示的是中文的话,需要修改成英文,通过Visual Studio Installer来修改,语言包,把原来打勾的中文选项去掉,只勾选英文选项

执行cl.exe是中文,需要切换成英文语言。

创建一个springboot3项目

可以在http://start.spring.io快速生成springboot项目

POM.xml

<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>3.0.5</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>
	<groupId>com.example</groupId>
	<artifactId>springboot3-demo</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>springboot3-demo</name>
	<description>Demo project for Spring Boot</description>
	<properties>
		<java.version>19</java.version>
	</properties>
	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-devtools</artifactId>
			<scope>runtime</scope>
			<optional>true</optional>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-configuration-processor</artifactId>
			<optional>true</optional>
		</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>
			</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>

生成exe可执行文件

1、打开X64 Native Tools Command Propmt窗口执行:

#先进入到对应的项目目录
cd C:\Users\tanhh\Desktop\springboot3\code\springboot3-demo

# 生成exe命令
mvn -Pnative native:compile

错误一:

找不到cl.exe,这个可能是没有安装Visual Studio Build Tools, 也可能是没有在X64 Native Tools Command Propmt窗口下执行。

错误二:

执行过程中出现下面错误信息:

[ERROR] Failed to execute goal org.graalvm.buildtools:native-maven-plugin:0.9.20:compile (default-cli) on project springboot3-demo: Execution of D:\develop\graalvm-ce-java19-22.3.1\bin\native-image.cmd @target\tmp\native-image-9198299026073687163.args returned non-zero result -> [Help 1]

根据错误找到了 @target\tmp\native-image-9198299026073687163.args这个文件,即target包下面的临时参数文件

实际上这个是因为安装 Visual Studio Build Tools的时候,语言包没有设置成英文的原因,可以看得出来啊,实际上生成执行exe分成了两个步骤去执行,首先需要生成 参数,在通过native-image操作执行参数

native-image @target\tmp\native-image-9198299026073687163.args 

错误三:

查看上面的切换语言包为英文即可

测试,秒启

利用Buildpacks构建可执行文件Docker

可以直接对本地可执行文件构建成镜像文件,这样就可以跨操作系统运行了,目前只支持到17,如果jdk设置成19,会出现报错。

Buildpacks,类似Dockerfile镜像构建技术

需要安装docker并启动docker

这种方式并不需要在机器上安装GGraalVM,会由springboot插件利用 /paketo-buildpacks/native-image来生成可执行文件,并打入到容器中

相关教程: GraalVM Native Image Support

Build a Spring Boot Application into a Native Executable

Docker镜像名称不能出现大写字母,所以我们需要设置一下镜像的名称

	<properties>
		<java.version>17</java.version>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<spring-boot-build-image.imageName>springboot3-demo</spring-boot-build-image.imageName>
	</properties>

然后执行命令生成Docker镜像。

# 生成docker镜像
mvn -Pnative spring-boot:build-image

# 运行docker镜像,秒启
docker run --rm -p 8080:8080 springboot3-demo:0.0.1-SNAPSHOT

注意: jdk的环境切换默认的jdk17

对jar包进行本地化构建

Spring Boot 应用程序通常通过 Maven ( mvn spring-boot:build-image) 或 Gradle ( gradle bootBuildImage) 集成使用 Cloud Native Buildpacks。但是,您也可以使用pack将经过 AOT 处理的 Spring Boot 可执行 jar 转换为本机容器映像。

首先,确保 Docker 守护程序可用(有关详细信息, 请参阅获取 Docker )。如果您使用的是 Linux,请将其配置为允许非根用户。

您还需要pack按照buildpacks.io 上的安装指南进行安装。

myproject-0.0.1-SNAPSHOT.jar假设一个 AOT 处理过的 Spring Boot 可执行 jar在目录中构建target,运行:

pack build --builder paketobuildpacks/builder:tiny \
    --path target/myproject-0.0.1-SNAPSHOT.jar \
    --env 'BP_NATIVE_IMAGE=true' \
    my-application:0.0.1-SNAPSHOT

猜你喜欢

转载自blog.csdn.net/weixin_46894136/article/details/130063290