Closed
Description
When I add the gradle AOT plugin id("org.graalvm.buildtools.native")
I have an error on a simple data class
document from org.springframework.data.mongodb.aot.LazyLoadingProxyAotProcessor
:
Exception in thread "main" java.lang.IllegalArgumentException: The following must be non-sealed interfaces: [...persistence.entity.Tags]
at org.springframework.aot.hint.JdkProxyHint$Builder.toTypeReferences(JdkProxyHint.java:159)
at org.springframework.aot.hint.JdkProxyHint$Builder.proxiedInterfaces(JdkProxyHint.java:129)
at org.springframework.aot.hint.ProxyHints.lambda$registerJdkProxy$1(ProxyHints.java:78)
at org.springframework.aot.hint.ProxyHints.registerJdkProxy(ProxyHints.java:50)
at org.springframework.aot.hint.ProxyHints.registerJdkProxy(ProxyHints.java:77)
at org.springframework.data.mongodb.aot.LazyLoadingProxyAotProcessor.lambda$registerLazyLoadingProxyIfNeeded$2(LazyLoadingProxyAotProcessor.java:76)
at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183)
at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179)
at java.base/java.util.Iterator.forEachRemaining(Iterator.java:133)
at java.base/java.util.Spliterators$IteratorSpliterator.forEachRemaining(Spliterators.java:1845)
at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150)
at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173)
at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596)
at org.springframework.data.mongodb.aot.LazyLoadingProxyAotProcessor.registerLazyLoadingProxyIfNeeded(LazyLoadingProxyAotProcessor.java:55)
at org.springframework.data.mongodb.aot.MongoManagedTypesBeanRegistrationAotProcessor.contributeType(MongoManagedTypesBeanRegistrationAotProcessor.java:54)
at org.springframework.data.aot.ManagedTypesRegistrationAotContribution.lambda$applyTo$0(ManagedTypesRegistrationAotContribution.java:97)
at org.springframework.data.util.TypeCollector.processType(TypeCollector.java:103)
at org.springframework.data.util.TypeCollector.process(TypeCollector.java:90)
at org.springframework.data.util.TypeCollector$ReachableTypes.lambda$forEach$0(TypeCollector.java:229)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
at org.springframework.data.util.TypeCollector$ReachableTypes.forEach(TypeCollector.java:229)
at org.springframework.data.aot.ManagedTypesRegistrationAotContribution.applyTo(ManagedTypesRegistrationAotContribution.java:97)
at org.springframework.beans.factory.aot.BeanDefinitionMethodGenerator.lambda$generateBeanDefinitionMethod$2(BeanDefinitionMethodGenerator.java:186)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
at org.springframework.beans.factory.aot.BeanDefinitionMethodGenerator.generateBeanDefinitionMethod(BeanDefinitionMethodGenerator.java:186)
at org.springframework.beans.factory.aot.BeanDefinitionMethodGenerator.generateBeanDefinitionMethod(BeanDefinitionMethodGenerator.java:109)
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:80)
FAILURE: Build failed with an exception.
The Tags class is a simple data class:
@Document
data class Tags(
@Id var key: String = "",
var url: String = "",
var langs: Map<LangEnum, String> = emptyMap()
)
Here is the gradle.kts plugin file, note that to use dataclass with spring data mongodb, you already have to open these classes with allOpen
, I guess it is probably related.
plugins {
id("org.springframework.boot") version "3.0.5"
id("io.spring.dependency-management") version "1.1.0"
id("org.jetbrains.kotlin.plugin.allopen") version "1.8.20-RC2"
id("org.graalvm.buildtools.native") version "0.9.20"
kotlin("jvm") version "1.7.22"
kotlin("plugin.spring") version "1.7.22"
}
allOpen {
annotation("org.springframework.data.mongodb.core.mapping.Document")
}