找不到运行时未初始化的类
错误信息:
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 {
}


