解决 SpringBoot3 GraalVM 编译问题

找不到运行时未初始化的类

错误信息:

Error: Classes that should be initialized at run time got initialized during image building:

org.slf4j.LoggerFactory was unintentionally initialized at build time. To see why org.slf4j.LoggerFactory got initialized use --trace-class-initialization=org.slf4j.LoggerFactory

遇到这种错误,先找出所有的完整类名,比如这里的是 org.slf4j.LoggerFactory,然后记下。

在 pom.xml 的 plugins 找到下面的插件:

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

添加配置参数,改成下面这样:

<plugin>
    <groupId>org.graalvm.buildtools</groupId>
    <artifactId>native-maven-plugin</artifactId>
    <!-- Native Build Solutions from: https://www.bilibili.com/opus/965880411977678853 -->
    <configuration>
        <buildArgs>
            --no-fallback
            --initialize-at-build-time=org.slf4j.LoggerFactory
            --initialize-at-build-time=org.slf4j.simple.SimpleLogger
            --initialize-at-build-time=org.slf4j.MDC
            --initialize-at-build-time=ch.qos.logback.classic.Level
            --initialize-at-build-time=ch.qos.logback.classic.Logger
            --initialize-at-build-time=ch.qos.logback.core.util.StatusPrinter
            --initialize-at-build-time=ch.qos.logback.core.status.StatusBase
            --initialize-at-build-time=ch.qos.logback.core.status.InfoStatus
            --initialize-at-build-time=ch.qos.logback.core.spi.AppenderAttachableImpl
            --initialize-at-build-time=ch.qos.logback.core.util.Loader
            --initialize-at-build-time=org.slf4j.impl.StaticLoggerBinder
            --initialize-at-build-time=ch.qos.logback.classic.spi.ThrowableProxy
            --initialize-at-build-time=ch.qos.logback.core.CoreConstants
            --initialize-at-build-time=ch.qos.logback.core.util.StatusPrinter2
            --initialize-at-build-time=org.slf4j.helpers.Reporter
            -H:+ReportExceptionStackTraces
        </buildArgs>
    </configuration>
</plugin>

只需将找不到的类用 --initialize-at-build-time= 提前指出就好了,根据实际情况补全即可,上面已经尽可能完整的给出了。

找不到构造函数

错误信息:

kotlin.reflect.jvm.internal.KotlinReflectionInternalError: Could not compute caller for function: public constructor UserRegisterDTO(username: kotlin.String, password: kotlin.String, email: kotlin.String, emailCode: kotlin.String)

这种情况出现在 Kotlini 编写的 SpringBoot 项目打包后的 Runtime,而 SpringBoot 官方提供了一个 @RegisterReflectionForBinding 注解用于解决这个问题。

使用方法很简单,如下所示:s

@Configuration
@RegisterReflectionForBinding(UserRegisterDTO::class)
class NativeBuildConfig {

}
未经允许禁止转载本站内容,经允许转载后请严格遵守CC-BY-NC-ND知识共享协议4.0,代码部分则采用GPL v3.0协议
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇