当有Avro作为依赖项时,Spring Boot 3无法生成本机映像



我正在运行./gradlew nativeCompile,以在具有implementation("org.apache.avro:avro:1.11.1")作为依赖项的项目上生成本机映像,但有以下例外:

2022-12-19T12:29:21.693+01:00  INFO [metrics,,] 81039 --- [           main] o.s.c.s.binder.DefaultBinderFactory      : Pre-creating binder child context (AOT) for kstream
2022-12-19T12:29:21.695+01:00  INFO [metrics,,] 81039 --- [           main] o.s.c.s.binder.DefaultBinderFactory      : Pre-creating binder child context (AOT) for ktable
2022-12-19T12:29:21.696+01:00  INFO [metrics,,] 81039 --- [           main] o.s.c.s.binder.DefaultBinderFactory      : Pre-creating binder child context (AOT) for globalktable
Exception in thread "main" java.lang.NullPointerException: Cannot invoke "String.startsWith(String)" because the return value of "java.lang.Class.getCanonicalName()" is null
at org.springframework.aot.hint.BindingReflectionHintsRegistrar.shouldSkipMembers(BindingReflectionHintsRegistrar.java:75)
at org.springframework.aot.hint.BindingReflectionHintsRegistrar.lambda$registerReflectionHints$0(BindingReflectionHintsRegistrar.java:88)
at org.springframework.aot.hint.ReflectionHints.registerType(ReflectionHints.java:86)
at org.springframework.aot.hint.ReflectionHints.registerType(ReflectionHints.java:109)
at org.springframework.aot.hint.BindingReflectionHintsRegistrar.registerReflectionHints(BindingReflectionHintsRegistrar.java:87)
at org.springframework.aot.hint.BindingReflectionHintsRegistrar.registerReflectionHints(BindingReflectionHintsRegistrar.java:65)
at org.springframework.data.util.TypeContributor.contribute(TypeContributor.java:70)
at org.springframework.data.util.TypeContributor.contribute(TypeContributor.java:82)
at org.springframework.data.aot.ManagedTypesBeanRegistrationAotProcessor.contributeType(ManagedTypesBeanRegistrationAotProcessor.java:137)
at org.springframework.data.mongodb.aot.MongoManagedTypesBeanRegistrationAotProcessor.contributeType(MongoManagedTypesBeanRegistrationAotProcessor.java:53)
at org.springframework.data.aot.ManagedTypesRegistrationAotContribution.lambda$applyTo$0(ManagedTypesRegistrationAotContribution.java:97)
at org.springframework.data.util.TypeCollector.processType(TypeCollector.java:104)
at org.springframework.data.util.TypeCollector.processType(TypeCollector.java:118)
at org.springframework.data.util.TypeCollector.processType(TypeCollector.java:118)
at org.springframework.data.util.TypeCollector.processType(TypeCollector.java:118)
at org.springframework.data.util.TypeCollector.processType(TypeCollector.java:118)
at org.springframework.data.util.TypeCollector.processType(TypeCollector.java:118)
at org.springframework.data.util.TypeCollector.process(TypeCollector.java:91)
at org.springframework.data.util.TypeCollector$ReachableTypes.lambda$forEach$0(TypeCollector.java:217)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
at org.springframework.data.util.TypeCollector$ReachableTypes.forEach(TypeCollector.java:217)
at org.springframework.data.aot.ManagedTypesRegistrationAotContribution.applyTo(ManagedTypesRegistrationAotContribution.java:97)
at org.springframework.beans.factory.aot.BeanDefinitionMethodGenerator.lambda$generateBeanDefinitionMethod$2(BeanDefinitionMethodGenerator.java:179)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
at org.springframework.beans.factory.aot.BeanDefinitionMethodGenerator.generateBeanDefinitionMethod(BeanDefinitionMethodGenerator.java:178)
at org.springframework.beans.factory.aot.BeanDefinitionMethodGenerator.generateBeanDefinitionMethod(BeanDefinitionMethodGenerator.java:102)
at org.springframework.beans.factory.aot.BeanRegistrationsAotContribution.lambda$generateRegisterBeanDefinitionsMethod$2(BeanRegistrationsAotContribution.java:85)
at java.base/java.util.LinkedHashMap.forEach(LinkedHashMap.java:721)
at org.springframework.beans.factory.aot.BeanRegistrationsAotContribution.generateRegisterBeanDefinitionsMethod(BeanRegistrationsAotContribution.java:83)
at org.springframework.beans.factory.aot.BeanRegistrationsAotContribution.lambda$applyTo$1(BeanRegistrationsAotContribution.java:67)
at org.springframework.aot.generate.GeneratedMethod.<init>(GeneratedMethod.java:54)
at org.springframework.aot.generate.GeneratedMethods.add(GeneratedMethods.java:112)
at org.springframework.aot.generate.GeneratedMethods.add(GeneratedMethods.java:89)
at org.springframework.beans.factory.aot.BeanRegistrationsAotContribution.applyTo(BeanRegistrationsAotContribution.java:66)
at org.springframework.context.aot.BeanFactoryInitializationAotContributions.applyTo(BeanFactoryInitializationAotContributions.java:78)
at org.springframework.context.aot.ApplicationContextAotGenerator.lambda$processAheadOfTime$0(ApplicationContextAotGenerator.java:58)
at org.springframework.context.aot.ApplicationContextAotGenerator.withCglibClassHandler(ApplicationContextAotGenerator.java:67)
at org.springframework.context.aot.ApplicationContextAotGenerator.processAheadOfTime(ApplicationContextAotGenerator.java:53)
at org.springframework.context.aot.ContextAotProcessor.performAotProcessing(ContextAotProcessor.java:106)
at org.springframework.context.aot.ContextAotProcessor.doProcess(ContextAotProcessor.java:84)
at org.springframework.context.aot.ContextAotProcessor.doProcess(ContextAotProcessor.java:49)
at org.springframework.context.aot.AbstractAotProcessor.process(AbstractAotProcessor.java:82)
at org.springframework.boot.SpringApplicationAotProcessor.main(SpringApplicationAotProcessor.java:76)
> Task :processAot FAILED

异常发生在BindingReflectionHintsRegistrar.shouldSkipMembers(...)—>type.getCanonicalName():

private boolean shouldSkipMembers(Class<?> type) {
return type.getCanonicalName().startsWith("java.") || type.isArray();
}

生成NullPointer的类型是class org.apache.avro.JsonProperties$1

如何解决这个问题?

这个特殊的NullPointerException已经在这个问题中得到了解决,这个修复已经在Spring Framework 6.0.3中发布。

最新更新