spring-projects / spring-plugin

Apache License 2.0
441 stars 117 forks source link

Add support for native-image #85

Closed mhalbritter closed 2 years ago

mhalbritter commented 2 years ago

Hello!

the hateoas smoke test currently fails with:

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'employeeController': Unsatisfied dependency expressed through constructor parameter 0: Error creating bean with name 'employeeModelAssembler': Unsatisfied dependency expressed through constructor parameter 0: Error creating bean with name 'delegatingEntityLinks': Unsatisfied dependency expressed through method 'delegatingEntityLinks' parameter 0: Error creating bean with name 'entityLinksPluginRegistry': Instantiation of supplied bean failed  
    at org.springframework.beans.factory.aot.BeanInstanceSupplier.resolveArgument(BeanInstanceSupplier.java:349) ~[na:na]   
    at org.springframework.beans.factory.aot.BeanInstanceSupplier.resolveArguments(BeanInstanceSupplier.java:265) ~[na:na]  
    at org.springframework.beans.factory.aot.BeanInstanceSupplier.get(BeanInstanceSupplier.java:208) ~[na:na]   
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.obtainInstanceFromSupplier(AbstractAutowireCapableBeanFactory.java:1224) ~[hateoas:6.0.0-SNAPSHOT]  
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.obtainFromSupplier(AbstractAutowireCapableBeanFactory.java:1209) ~[hateoas:6.0.0-SNAPSHOT]  
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1156) ~[hateoas:6.0.0-SNAPSHOT]  
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:566) ~[hateoas:6.0.0-SNAPSHOT] 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:526) ~[hateoas:6.0.0-SNAPSHOT]   
    at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) ~[hateoas:6.0.0-SNAPSHOT] 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[hateoas:6.0.0-SNAPSHOT] 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) ~[hateoas:6.0.0-SNAPSHOT]  
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) ~[hateoas:6.0.0-SNAPSHOT]    
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:930) ~[hateoas:6.0.0-SNAPSHOT] 
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:926) ~[hateoas:6.0.0-SNAPSHOT]    
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:592) ~[hateoas:6.0.0-SNAPSHOT]    
    at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146) ~[hateoas:3.0.0-SNAPSHOT]   
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:731) ~[hateoas:3.0.0-SNAPSHOT] 
    at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:430) ~[hateoas:3.0.0-SNAPSHOT]  
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:312) ~[hateoas:3.0.0-SNAPSHOT] 
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1303) ~[hateoas:3.0.0-SNAPSHOT]    
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1292) ~[hateoas:3.0.0-SNAPSHOT]    
    at com.example.hateoas.HateoasApplication.main(HateoasApplication.java:13) ~[hateoas:na]    
Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'employeeModelAssembler': Unsatisfied dependency expressed through constructor parameter 0: Error creating bean with name 'delegatingEntityLinks': Unsatisfied dependency expressed through method 'delegatingEntityLinks' parameter 0: Error creating bean with name 'entityLinksPluginRegistry': Instantiation of supplied bean failed 
    at org.springframework.beans.factory.aot.BeanInstanceSupplier.resolveArgument(BeanInstanceSupplier.java:349) ~[na:na]   
    at org.springframework.beans.factory.aot.BeanInstanceSupplier.resolveArguments(BeanInstanceSupplier.java:265) ~[na:na]  
    at org.springframework.beans.factory.aot.BeanInstanceSupplier.get(BeanInstanceSupplier.java:208) ~[na:na]   
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.obtainInstanceFromSupplier(AbstractAutowireCapableBeanFactory.java:1224) ~[hateoas:6.0.0-SNAPSHOT]  
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.obtainFromSupplier(AbstractAutowireCapableBeanFactory.java:1209) ~[hateoas:6.0.0-SNAPSHOT]  
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1156) ~[hateoas:6.0.0-SNAPSHOT]  
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:566) ~[hateoas:6.0.0-SNAPSHOT] 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:526) ~[hateoas:6.0.0-SNAPSHOT]   
    at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) ~[hateoas:6.0.0-SNAPSHOT] 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[hateoas:6.0.0-SNAPSHOT] 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) ~[hateoas:6.0.0-SNAPSHOT]  
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) ~[hateoas:6.0.0-SNAPSHOT]    
    at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:254) ~[hateoas:6.0.0-SNAPSHOT]  
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1374) ~[hateoas:6.0.0-SNAPSHOT] 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1294) ~[hateoas:6.0.0-SNAPSHOT]   
    at org.springframework.beans.factory.aot.BeanInstanceSupplier.resolveArgument(BeanInstanceSupplier.java:332) ~[na:na]   
    ... 21 common frames omitted    
Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'delegatingEntityLinks': Unsatisfied dependency expressed through method 'delegatingEntityLinks' parameter 0: Error creating bean with name 'entityLinksPluginRegistry': Instantiation of supplied bean failed   
    at org.springframework.beans.factory.aot.BeanInstanceSupplier.resolveArgument(BeanInstanceSupplier.java:349) ~[na:na]   
    at org.springframework.beans.factory.aot.BeanInstanceSupplier.resolveArguments(BeanInstanceSupplier.java:265) ~[na:na]  
    at org.springframework.beans.factory.aot.BeanInstanceSupplier.get(BeanInstanceSupplier.java:208) ~[na:na]   
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.obtainInstanceFromSupplier(AbstractAutowireCapableBeanFactory.java:1224) ~[hateoas:6.0.0-SNAPSHOT]  
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.obtainFromSupplier(AbstractAutowireCapableBeanFactory.java:1209) ~[hateoas:6.0.0-SNAPSHOT]  
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1156) ~[hateoas:6.0.0-SNAPSHOT]  
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:566) ~[hateoas:6.0.0-SNAPSHOT] 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:526) ~[hateoas:6.0.0-SNAPSHOT]   
    at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) ~[hateoas:6.0.0-SNAPSHOT] 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[hateoas:6.0.0-SNAPSHOT] 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) ~[hateoas:6.0.0-SNAPSHOT]  
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) ~[hateoas:6.0.0-SNAPSHOT]    
    at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:254) ~[hateoas:6.0.0-SNAPSHOT]  
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1374) ~[hateoas:6.0.0-SNAPSHOT] 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1294) ~[hateoas:6.0.0-SNAPSHOT]   
    at org.springframework.beans.factory.aot.BeanInstanceSupplier.resolveArgument(BeanInstanceSupplier.java:332) ~[na:na]   
    ... 36 common frames omitted    
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityLinksPluginRegistry': Instantiation of supplied bean failed    
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.obtainInstanceFromSupplier(AbstractAutowireCapableBeanFactory.java:1235) ~[hateoas:6.0.0-SNAPSHOT]  
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.obtainFromSupplier(AbstractAutowireCapableBeanFactory.java:1209) ~[hateoas:6.0.0-SNAPSHOT]  
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1156) ~[hateoas:6.0.0-SNAPSHOT]  
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:566) ~[hateoas:6.0.0-SNAPSHOT] 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:526) ~[hateoas:6.0.0-SNAPSHOT]   
    at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) ~[hateoas:6.0.0-SNAPSHOT] 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[hateoas:6.0.0-SNAPSHOT] 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) ~[hateoas:6.0.0-SNAPSHOT]  
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) ~[hateoas:6.0.0-SNAPSHOT]    
    at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:254) ~[hateoas:6.0.0-SNAPSHOT]  
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1374) ~[hateoas:6.0.0-SNAPSHOT] 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1294) ~[hateoas:6.0.0-SNAPSHOT]   
    at org.springframework.beans.factory.aot.BeanInstanceSupplier.resolveArgument(BeanInstanceSupplier.java:332) ~[na:na]   
    ... 51 common frames omitted    
Caused by: com.oracle.svm.core.jdk.UnsupportedFeatureError: Proxy class defined by interfaces [interface java.util.List, interface org.springframework.aop.SpringProxy, interface org.springframework.aop.framework.Advised, interface org.springframework.core.DecoratingProxy] not found. Generating proxy classes at runtime is not supported. Proxy classes need to be defined at image build time by specifying the list of interfaces that they implement. To define proxy classes use -H:DynamicProxyConfigurationFiles=<comma-separated-config-files> and -H:DynamicProxyConfigurationResources=<comma-separated-config-resources> options. 
    at com.oracle.svm.core.util.VMError.unsupportedFeature(VMError.java:89) ~[na:na]    
    at com.oracle.svm.reflect.proxy.DynamicProxySupport.getProxyClass(DynamicProxySupport.java:158) ~[na:na]    
    at java.lang.reflect.Proxy.getProxyConstructor(Proxy.java:48) ~[hateoas:na] 
    at java.lang.reflect.Proxy.newProxyInstance(Proxy.java:1037) ~[hateoas:na]  
    at org.springframework.aop.framework.JdkDynamicAopProxy.getProxy(JdkDynamicAopProxy.java:126) ~[na:na]  
    at org.springframework.aop.framework.JdkDynamicAopProxy.getProxy(JdkDynamicAopProxy.java:118) ~[na:na]  
    at org.springframework.aop.framework.ProxyFactory.getProxy(ProxyFactory.java:97) ~[na:na]   
    at org.springframework.plugin.core.support.AbstractTypeAwareSupport.getBeans(AbstractTypeAwareSupport.java:94) ~[hateoas:3.0.0-M1]  
    at org.springframework.plugin.core.support.PluginRegistryFactoryBean.getObject(PluginRegistryFactoryBean.java:38) ~[hateoas:3.0.0-M1]   
    at org.springframework.hateoas.config.EntityLinksConfiguration.entityLinksPluginRegistry(EntityLinksConfiguration.java:46) ~[hateoas:na]    
    at org.springframework.hateoas.config.EntityLinksConfiguration__BeanDefinitions.lambda$getEntityLinksPluginRegistryInstanceSupplier$0(EntityLinksConfiguration__BeanDefinitions.java:25) ~[na:na]   
    at org.springframework.util.function.ThrowingBiFunction.apply(ThrowingBiFunction.java:68) ~[hateoas:6.0.0-SNAPSHOT] 
    at org.springframework.util.function.ThrowingBiFunction.apply(ThrowingBiFunction.java:54) ~[hateoas:6.0.0-SNAPSHOT] 
    at org.springframework.beans.factory.aot.BeanInstanceSupplier.get(BeanInstanceSupplier.java:210) ~[na:na]   
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.obtainInstanceFromSupplier(AbstractAutowireCapableBeanFactory.java:1224) ~[hateoas:6.0.0-SNAPSHOT]  
    ... 63 common frames omitted

Judging from the error message there are some proxy hints missing.

More details can be found here: https://ge.spring.io/s/ba7dez42xptto