开发你的第一个GraalVM原生应用

构建 Spring Boot 原生映像应用主要有两种方式:spring-doc.cadn.net.cn

启动一个新的原生 Spring Boot 项目最简单的方法是进入 start.spring.io,添加GraalVM 原生支持依赖关系并生成项目。 包含的HELP.md文件会提供入门提示。

示例应用

我们需要一个示例应用程序,可以用来创建我们的原生镜像。 就我们而言,开发你的第一个春季靴子应用部分介绍的简单“Hello World!”网页应用就足够了。spring-doc.cadn.net.cn

总结一下,我们的主要应用代码如下:spring-doc.cadn.net.cn

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@SpringBootApplication
public class MyApplication {

	@RequestMapping("/")
	String home() {
		return "Hello World!";
	}

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

}

该应用使用 Spring MVC 和嵌入式 Tomcat,这两者均经过测试和验证,适用于 GraalVM 原生映像。spring-doc.cadn.net.cn

使用构建包构建原生镜像

Spring Boot 支持构建包含原生可执行文件的 Docker 镜像,使用与 Maven 和 Gradle 的 Cloud Native Buildpacks(CNB)集成,以及 Paketo Java 原生映像构建包。 这意味着你只需输入一个命令,就能快速将一个合理的镜像导入本地运行的 Docker 守护进程。 最终生成的镜像不包含JVM,而是静态编译的原生镜像。 这导致图像变小。spring-doc.cadn.net.cn

用于图像的CNB构建器是Paketobuildpacks/builder-noble-java-tiny:最新. 它体积小,攻击面也更小。它不包含 shell,且包含简化的系统库集。 如果你需要更多工具,可以用paketobuildpacks/ubuntu-noble-run:最新作为跑步画面。
你必须至少用 JDK 25 构建你的应用,因为构建包使用的是和编译用的 Java 版本相同的 GraalVM 原生映像版本。

系统需求

应该安装Docker。详情请参见Get Docker。如果你用的是Linux,可以设置成允许非root用户访问spring-doc.cadn.net.cn

你可以跑了Docker 运行 Hello-World(不须藤)以检查 Docker 守护进程是否可访问,如预期般。 更多细节可以查阅MavenGradle Spring Boot插件的文档。
在macOS上,建议至少将分配给Docker的内存增加到8GB,并且可能还会增加更多CPU。 更多细节请参见Stack Overflow的回答。 在 Microsoft Windows 上,确保启用 Docker WSL 2 后端以提升性能。

使用 Maven

要用 Maven 构建原生图片容器,你应该确保你的pom.xml文件使用Spring靴启动父以及org.graalvm.buildtools:native-maven-plugin. 你应该有<家长>该部分看起来像这样:spring-doc.cadn.net.cn

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

你还应该在<build> <plugins>部分:spring-doc.cadn.net.cn

<plugin>
	<groupId>org.graalvm.buildtools</groupId>
	<artifactId>native-maven-plugin</artifactId>
</plugin>

Spring靴启动父宣告本地配置配置文件,配置需要运行的执行内容以创建原生映像。 你可以用-P命令行标记。spring-doc.cadn.net.cn

如果你不想用Spring靴启动父你需要配置执行进程进攻的进攻Spring Boot插件中的目标和添加可达性元数据目标来自Native Build Tools插件。

要构建镜像,你可以运行Spring Boot:构建映像目标本地个人资料活跃:spring-doc.cadn.net.cn

$ mvn -Pnative spring-boot:build-image

使用 Gradle

当应用GraalVM原生映像插件时,Spring Boot Gradle插件会自动配置AOT任务。 你应该检查你的Gradle构建是否包含插件该块包括org.graalvm.buildtools.native.spring-doc.cadn.net.cn

只要org.graalvm.buildtools.native插件被应用,启动构建图像任务将生成原生图像,而非JVM图像。 你可以用以下方式来完成这个任务:spring-doc.cadn.net.cn

$ gradle bootBuildImage

运行示例

运行了相应的构建命令后,应该会有一个 Docker 镜像可用。 你可以用以下方式开始申请Docker 运行:spring-doc.cadn.net.cn

$ docker run --rm -p 8080:8080 docker.io/library/myproject:0.0.1-SNAPSHOT

你应该会看到类似以下的输出:spring-doc.cadn.net.cn

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::  (v{version-spring-boot})
....... . . .
....... . . . (log output here)
....... . . .
........ Started MyApplication in 0.08 seconds (process running for 0.095)
启动时间因机器而异,但应该比运行在JVM上的Spring Boot应用快得多。

如果你打开网页浏览器本地主持人:8080你应该会看到以下输出:spring-doc.cadn.net.cn

Hello World!

要优雅地退出应用,请按ctrl-c.spring-doc.cadn.net.cn

使用原生构建工具构建原生图像

如果你想直接生成原生可执行文件而不使用Docker,可以使用GraalVM原生构建工具。 原生构建工具是GraalVM为Maven和Gradle自带的插件。 你可以用它们执行各种 GraalVM 任务,包括生成原生镜像。spring-doc.cadn.net.cn

前提条件

要用原生构建工具构建原生镜像,你需要在你的机器上安装 GraalVM 发行版。 你可以在Liberica原生图像套件页面手动下载,或者使用像SDKMAN!这样的下载管理器。spring-doc.cadn.net.cn

Linux 和 macOS

在macOS或Linux上安装原生映像编译器时,我们建议使用SDKMAN!。 去找SDKMAN!从 sdkman.io 下载并使用以下命令安装Liberica GraalVM发行版:spring-doc.cadn.net.cn

$ sdk install java 25.r25-nik
$ sdk use java 25.r25-nik

通过检查 的输出来确认配置正确版本Java 版本:spring-doc.cadn.net.cn

$ java -version
openjdk version "25" 2025-09-16 LTS
OpenJDK Runtime Environment Liberica-NIK-25.0.0-1 (build 25+37-LTS)
OpenJDK 64-Bit Server VM Liberica-NIK-25.0.0-1 (build 25+37-LTS, mixed mode, sharing)

窗户

在Windows上,按照以下说明安装GraalVMLiberica原生Image Kit(版本25)、Visual Studio构建工具和Windows SDK。 由于Windows相关的命令行最大长度限制,请务必使用x64原生工具命令提示符,而非普通Windows命令行来运行Maven或Gradle插件。spring-doc.cadn.net.cn

使用 Maven

和构建包支持一样,你需要确保你使用的是Spring靴启动父为了继承本地剖面,且org.graalvm.buildtools:native-maven-plugin使用了插件。spring-doc.cadn.net.cn

本地配置文件激活时,你可以调用本地:编译目标触发原生图像汇编:spring-doc.cadn.net.cn

$ mvn -Pnative native:compile

本地镜像可执行文件可在目标目录。spring-doc.cadn.net.cn

使用 Gradle

当 Native Build Tools 的 Gradle 插件应用到你的项目时,Spring Boot Gradle 插件会自动触发 Spring AOT 引擎。 任务依赖是自动配置的,所以你只需运行标准程序即可原生编译生成原生图像的任务:spring-doc.cadn.net.cn

$ gradle nativeCompile

本地镜像可执行文件可在build/native/nativeCompile目录。spring-doc.cadn.net.cn

运行示例

此时,你的申请应该可以正常工作了。你现在可以通过直接运行应用程序来启动它:spring-doc.cadn.net.cn

$ target/myproject
$ build/native/nativeCompile/myproject

你应该会看到类似以下的输出:spring-doc.cadn.net.cn

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::  (v4.0.0)
....... . . .
....... . . . (log output here)
....... . . .
........ Started MyApplication in 0.08 seconds (process running for 0.095)
启动时间因机器而异,但应该比运行在JVM上的Spring Boot应用快得多。

如果你打开网页浏览器本地主持人:8080你应该会看到以下输出:spring-doc.cadn.net.cn

Hello World!

要优雅地退出应用,请按ctrl-c.spring-doc.cadn.net.cn