You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在无JRE的GraalVM环境中运行Spring Boot应用

解决Spring Boot GraalVM Native镜像在无JRE Ubuntu容器中运行的JRE依赖问题

我来帮你搞定这个问题!你遇到的这个错误,本质是Spring Boot Native编译后的二进制程序里,还有部分类在初始化阶段就尝试查找JRE路径(比如JAVA_HOME或者java可执行文件),而无JRE的环境里根本没有这些东西,所以触发了报错。下面是具体的解决步骤:

第一步:定位需要延迟初始化的类

要精准解决问题,首先得找出哪些类在初始化时依赖JRE环境。你可以通过GraalVM的跟踪工具来排查:

  • 在编译原生镜像时,添加--trace-class-initialization=*参数,这样编译过程会输出所有类的初始化时机。
  • 查看输出日志,搜索包含JAVA_HOME、bin/java相关的类,这些就是需要延迟初始化的目标。

常见的需要延迟的Spring Boot相关类包括:

  • org.springframework.boot.system.JavaHome:这个类专门负责查找Java home路径,是最常见的触发点
  • 部分日志框架的类(比如ch.qos.logback.core.util.Loader):如果日志组件在初始化时尝试加载JRE相关资源,也会触发问题

第二步:配置延迟类初始化

找到目标类后,你可以通过--delay-class-initialization-to-runtime参数,把这些类的初始化延迟到程序运行时(而不是编译后的镜像初始化阶段)。具体配置方式根据你用的构建工具而定:

Maven配置

在native-maven-plugin的<buildArgs>里添加参数:

<plugin>
    <groupId>org.graalvm.buildtools</groupId>
    <artifactId>native-maven-plugin</artifactId>
    <configuration>
        <buildArgs>
            <buildArg>--delay-class-initialization-to-runtime=org.springframework.boot.system.JavaHome,ch.qos.logback.core.util.Loader</buildArg>
        </buildArgs>
    </configuration>
</plugin>

Gradle配置

在graalvmNative的二进制配置里添加:

graalvmNative {
    binaries {
        main {
            buildArgs.add("--delay-class-initialization-to-runtime=org.springframework.boot.system.JavaHome,ch.qos.logback.core.util.Loader")
        }
    }
}

第三步:优化Docker镜像构建

确保你的Dockerfile是完全无JRE的:

# 使用无JRE的Ubuntu基础镜像
FROM ubuntu:latest

# 复制编译好的原生二进制程序到容器
COPY target/your-spring-boot-app /app/your-spring-boot-app

# 设置执行权限
RUN chmod +x /app/your-spring-boot-app

# 运行程序
CMD ["/app/your-spring-boot-app"]

额外注意事项

  1. 确保使用的Spring Boot版本≥2.4(完全支持GraalVM Native),且GraalVM版本与Spring Boot版本匹配(比如Spring Boot 3.x对应GraalVM 22+)
  2. 不要盲目添加大量类到延迟列表,尽量只添加排查到的类,避免引发其他初始化问题
  3. 本地测试时,可以临时删除JAVA_HOME环境变量再运行二进制,提前验证是否解决问题

内容的提问来源于stack exchange,提问作者Mateusz Woźniak

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 15:42:53