Skip to content

No classes have been predefined during the image build to load from bytecodes at runtime #12104

@imgoby

Description

@imgoby

Describe the Issue

the project using kyro built with native-image,there is something wrong while running application.

Using the latest version of GraalVM can resolve many issues.

GraalVM Version

native-image 17.0.16 2025-07-15

Operating System and Version

centos 7.9

Troubleshooting Confirmation

Run Command

mvn clean package native:compile

Expected Behavior

no exception.

Actual Behavior

2025-09-04T09:52:39.283+08:00 ERROR 3696 --- [nio-9605-exec-5] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Handler dispatch failed: com.oracle.svm.core.jdk.UnsupportedFeatureError: No classes have been predefined during the image build to load from bytecodes at runtime.] with root cause

com.oracle.svm.core.jdk.UnsupportedFeatureError: No classes have been predefined during the image build to load from bytecodes at runtime.
	at org.graalvm.nativeimage.builder/com.oracle.svm.core.util.VMError.unsupportedFeature(VMError.java:96) ~[na:na]
	at org.graalvm.nativeimage.builder/com.oracle.svm.core.hub.PredefinedClassesSupport.throwNoBytecodeClasses(PredefinedClassesSupport.java:76) ~[na:na]
	at org.graalvm.nativeimage.builder/com.oracle.svm.core.hub.PredefinedClassesSupport.loadClass(PredefinedClassesSupport.java:130) ~[na:na]
	at [email protected]/java.lang.ClassLoader.defineClass(ClassLoader.java:294) ~[spring-cloud-alibaba-kryo-native-image:na]
	at com.esotericsoftware.reflectasm.AccessClassLoader.defineClass(AccessClassLoader.java:78) ~[na:na]
	at com.esotericsoftware.reflectasm.AccessClassLoader.defineAccessClass(AccessClassLoader.java:57) ~[na:na]
	at com.esotericsoftware.reflectasm.ConstructorAccess.get(ConstructorAccess.java:99) ~[spring-cloud-alibaba-kryo-native-image:na]
	at com.esotericsoftware.kryo.util.DefaultInstantiatorStrategy.newInstantiatorOf(DefaultInstantiatorStrategy.java:59) ~[na:na]
	at com.esotericsoftware.kryo.Kryo.newInstantiator(Kryo.java:1190) ~[spring-cloud-alibaba-kryo-native-image:na]
	at com.esotericsoftware.kryo.Kryo.newInstance(Kryo.java:1199) ~[spring-cloud-alibaba-kryo-native-image:na]
	at com.esotericsoftware.kryo.serializers.FieldSerializer.create(FieldSerializer.java:164) ~[spring-cloud-alibaba-kryo-native-image:na]
	at com.esotericsoftware.kryo.serializers.FieldSerializer.read(FieldSerializer.java:123) ~[spring-cloud-alibaba-kryo-native-image:na]
	at com.esotericsoftware.kryo.Kryo.readClassAndObject(Kryo.java:877) ~[spring-cloud-alibaba-kryo-native-image:na]
	at com.yuhoutian.kryo.demo.util.KryoUtil.deserialize(KryoUtil.java:36) ~[na:na]
	at com.yuhoutian.kryo.demo.controller.TestController.read(TestController.java:57) ~[spring-cloud-alibaba-kryo-native-image:na]
	at [email protected]/java.lang.reflect.Method.invoke(Method.java:569) ~[spring-cloud-alibaba-kryo-native-image:na]
	at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) ~[spring-cloud-alibaba-kryo-native-image:6.0.11]
	at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150) ~[spring-cloud-alibaba-kryo-native-image:6.0.11]
	at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118) ~[spring-cloud-alibaba-kryo-native-image:6.0.11]
	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:884) ~[spring-cloud-alibaba-kryo-native-image:6.0.11]
	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:797) ~[spring-cloud-alibaba-kryo-native-image:6.0.11]
	at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-cloud-alibaba-kryo-native-image:6.0.11]
	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1081) ~[spring-cloud-alibaba-kryo-native-image:6.0.11]
	at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:974) ~[spring-cloud-alibaba-kryo-native-image:6.0.11]
	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1011) ~[spring-cloud-alibaba-kryo-native-image:6.0.11]
	at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:903) ~[spring-cloud-alibaba-kryo-native-image:6.0.11]
	at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:564) ~[spring-cloud-alibaba-kryo-native-image:6.0]
	at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885) ~[spring-cloud-alibaba-kryo-native-image:6.0.11]
	at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658) ~[spring-cloud-alibaba-kryo-native-image:6.0]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:205) ~[na:na]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) ~[na:na]
	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) ~[spring-cloud-alibaba-kryo-native-image:10.1.11]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174) ~[na:na]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) ~[na:na]
	at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-cloud-alibaba-kryo-native-image:6.0.11]
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-cloud-alibaba-kryo-native-image:6.0.11]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174) ~[na:na]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) ~[na:na]
	at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-cloud-alibaba-kryo-native-image:6.0.11]
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-cloud-alibaba-kryo-native-image:6.0.11]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174) ~[na:na]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) ~[na:na]
	at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-cloud-alibaba-kryo-native-image:6.0.11]
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-cloud-alibaba-kryo-native-image:6.0.11]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174) ~[na:na]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) ~[na:na]
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:166) ~[na:na]
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) ~[na:na]
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:482) ~[spring-cloud-alibaba-kryo-native-image:10.1.11]
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115) ~[na:na]
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) ~[spring-cloud-alibaba-kryo-native-image:10.1.11]
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) ~[na:na]
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:341) ~[na:na]
	at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:391) ~[na:na]
	at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) ~[spring-cloud-alibaba-kryo-native-image:10.1.11]
	at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:894) ~[na:na]
	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1740) ~[na:na]
	at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) ~[spring-cloud-alibaba-kryo-native-image:10.1.11]
	at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) ~[na:na]
	at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) ~[na:na]
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[na:na]
	at [email protected]/java.lang.Thread.run(Thread.java:840) ~[spring-cloud-alibaba-kryo-native-image:na]
	at org.graalvm.nativeimage.builder/com.oracle.svm.core.thread.PlatformThreads.threadStartRoutine(PlatformThreads.java:915) ~[spring-cloud-alibaba-kryo-native-image:na]
	at org.graalvm.nativeimage.builder/com.oracle.svm.core.thread.PlatformThreads.threadStartRoutine(PlatformThreads.java:890) ~[spring-cloud-alibaba-kryo-native-image:na]

Steps to Reproduce

(1)native-image version
[root@localhost target]# sdk current java

Using java version 23.0.9.r17-nik

[root@localhost target]# java --version
openjdk 17.0.16 2025-07-15 LTS
OpenJDK Runtime Environment Liberica-NIK-23.0.9-1 (build 17.0.16+13-LTS)
OpenJDK 64-Bit Server VM Liberica-NIK-23.0.9-1 (build 17.0.16+13-LTS, mixed mode, sharing)

[root@localhost target]# native-image --version
native-image 17.0.16 2025-07-15
GraalVM Runtime Environment Liberica-NIK-23.0.9-1 (build 17.0.16+13-LTS)
Substrate VM Liberica-NIK-23.0.9-1 (build 17.0.16+13-LTS, serial gc)

(2)source code:
https://github.com/imgoby/spring-cloud-alibaba-dubbo-native/tree/main/spring-cloud-alibaba-kryo-native-image

(3)execute compile
in the project root dir: spring-cloud-alibaba-dubbo-native
execute:
mvn clean package native:compile

(4)run application
cd spring-cloud-alibaba-dubbo-native/spring-cloud-alibaba-kryo-native-image/target

(5)exception:

2025-09-04T09:52:39.283+08:00 ERROR 3696 --- [nio-9605-exec-5] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Handler dispatch failed: com.oracle.svm.core.jdk.UnsupportedFeatureError: No classes have been predefined during the image build to load from bytecodes at runtime.] with root cause

com.oracle.svm.core.jdk.UnsupportedFeatureError: No classes have been predefined during the image build to load from bytecodes at runtime.
	at org.graalvm.nativeimage.builder/com.oracle.svm.core.util.VMError.unsupportedFeature(VMError.java:96) ~[na:na]
	at org.graalvm.nativeimage.builder/com.oracle.svm.core.hub.PredefinedClassesSupport.throwNoBytecodeClasses(PredefinedClassesSupport.java:76) ~[na:na]
	at org.graalvm.nativeimage.builder/com.oracle.svm.core.hub.PredefinedClassesSupport.loadClass(PredefinedClassesSupport.java:130) ~[na:na]
	at [email protected]/java.lang.ClassLoader.defineClass(ClassLoader.java:294) ~[spring-cloud-alibaba-kryo-native-image:na]
	at com.esotericsoftware.reflectasm.AccessClassLoader.defineClass(AccessClassLoader.java:78) ~[na:na]
	at com.esotericsoftware.reflectasm.AccessClassLoader.defineAccessClass(AccessClassLoader.java:57) ~[na:na]
	at com.esotericsoftware.reflectasm.ConstructorAccess.get(ConstructorAccess.java:99) ~[spring-cloud-alibaba-kryo-native-image:na]
	at com.esotericsoftware.kryo.util.DefaultInstantiatorStrategy.newInstantiatorOf(DefaultInstantiatorStrategy.java:59) ~[na:na]
	at com.esotericsoftware.kryo.Kryo.newInstantiator(Kryo.java:1190) ~[spring-cloud-alibaba-kryo-native-image:na]
	at com.esotericsoftware.kryo.Kryo.newInstance(Kryo.java:1199) ~[spring-cloud-alibaba-kryo-native-image:na]
	at com.esotericsoftware.kryo.serializers.FieldSerializer.create(FieldSerializer.java:164) ~[spring-cloud-alibaba-kryo-native-image:na]
	at com.esotericsoftware.kryo.serializers.FieldSerializer.read(FieldSerializer.java:123) ~[spring-cloud-alibaba-kryo-native-image:na]
	at com.esotericsoftware.kryo.Kryo.readClassAndObject(Kryo.java:877) ~[spring-cloud-alibaba-kryo-native-image:na]
	at com.yuhoutian.kryo.demo.util.KryoUtil.deserialize(KryoUtil.java:36) ~[na:na]
	at com.yuhoutian.kryo.demo.controller.TestController.read(TestController.java:57) ~[spring-cloud-alibaba-kryo-native-image:na]
	at [email protected]/java.lang.reflect.Method.invoke(Method.java:569) ~[spring-cloud-alibaba-kryo-native-image:na]
	at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) ~[spring-cloud-alibaba-kryo-native-image:6.0.11]
	at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150) ~[spring-cloud-alibaba-kryo-native-image:6.0.11]
	at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118) ~[spring-cloud-alibaba-kryo-native-image:6.0.11]
	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:884) ~[spring-cloud-alibaba-kryo-native-image:6.0.11]
	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:797) ~[spring-cloud-alibaba-kryo-native-image:6.0.11]
	at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-cloud-alibaba-kryo-native-image:6.0.11]
	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1081) ~[spring-cloud-alibaba-kryo-native-image:6.0.11]
	at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:974) ~[spring-cloud-alibaba-kryo-native-image:6.0.11]
	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1011) ~[spring-cloud-alibaba-kryo-native-image:6.0.11]
	at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:903) ~[spring-cloud-alibaba-kryo-native-image:6.0.11]
	at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:564) ~[spring-cloud-alibaba-kryo-native-image:6.0]
	at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885) ~[spring-cloud-alibaba-kryo-native-image:6.0.11]
	at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658) ~[spring-cloud-alibaba-kryo-native-image:6.0]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:205) ~[na:na]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) ~[na:na]
	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) ~[spring-cloud-alibaba-kryo-native-image:10.1.11]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174) ~[na:na]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) ~[na:na]
	at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-cloud-alibaba-kryo-native-image:6.0.11]
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-cloud-alibaba-kryo-native-image:6.0.11]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174) ~[na:na]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) ~[na:na]
	at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-cloud-alibaba-kryo-native-image:6.0.11]
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-cloud-alibaba-kryo-native-image:6.0.11]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174) ~[na:na]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) ~[na:na]
	at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-cloud-alibaba-kryo-native-image:6.0.11]
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-cloud-alibaba-kryo-native-image:6.0.11]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174) ~[na:na]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) ~[na:na]
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:166) ~[na:na]
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) ~[na:na]
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:482) ~[spring-cloud-alibaba-kryo-native-image:10.1.11]
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115) ~[na:na]
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) ~[spring-cloud-alibaba-kryo-native-image:10.1.11]
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) ~[na:na]
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:341) ~[na:na]
	at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:391) ~[na:na]
	at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) ~[spring-cloud-alibaba-kryo-native-image:10.1.11]
	at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:894) ~[na:na]
	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1740) ~[na:na]
	at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) ~[spring-cloud-alibaba-kryo-native-image:10.1.11]
	at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) ~[na:na]
	at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) ~[na:na]
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[na:na]
	at [email protected]/java.lang.Thread.run(Thread.java:840) ~[spring-cloud-alibaba-kryo-native-image:na]
	at org.graalvm.nativeimage.builder/com.oracle.svm.core.thread.PlatformThreads.threadStartRoutine(PlatformThreads.java:915) ~[spring-cloud-alibaba-kryo-native-image:na]
	at org.graalvm.nativeimage.builder/com.oracle.svm.core.thread.PlatformThreads.threadStartRoutine(PlatformThreads.java:890) ~[spring-cloud-alibaba-kryo-native-image:na]

Additional Context

No response

Run-Time Log Output and Error Messages

No response

Metadata

Metadata

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions