Closed as not planned
Description
Hi, I encountered an issue with Spring AOT. Please help me confirm if this is a bug. Thanks.
【what to do】
generate native file based on Springboot and GraalVM
【issue】:
Once running "mvn -Pnative native:compile",the message appears:
Failed to execute goal org.springframework.boot:spring-boot-maven-plugin:3.4.3:process-aot (process-aot) ...
non-static method getMqMap() cannot be referenced from a static context MqConfig__BeanDefinitions.java
open MqConfig__BeanDefinitions.java in target/spring-aot:
@Generated
public class MqConfig__BeanDefinitions {
@SuppressWarnings({"rawtypes", "unchecked"})
Map getMqMap() {
Map map = new LinkedHashMap(1);
map.put("topic", "topic1");
return map;
}
public static BeanDefinition getMqBeanDefinition() {
RootBeanDefinition beanDefinition = new RootBeanDefinition(MqConfig.class);
beanDefinition.getPropertyValues().addPropertyValue("namespace", "mq1");
beanDefinition.getPropertyValues().addPropertyValue("servers", "1.1.1.1");
beanDefinition.getPropertyValues().addPropertyValue("config", getMqMap());
beanDefinition.setInstanceSupplier(MqConfig::new);
return beanDefinition;
}
}
------------refre to my codes and environment as below-------------
env: macos 14.1, springboot(spring-boot-maven-plugin) 3.4.3,Liberica-NIK-23.1.6-1,maven 3.6.3
- The relevant content of application.yml is as follows:
akso:
mq:
configs:
- namespace: "mq1"
servers: "1.1.1.1"
config:
topic: "topic1"
- MqConfig.java:
public class MqConfig {
private String namespace;
private String servers;
private Map<String, String> config;
...setter and getter for above parameters...
}
3.AksoMqConfiguration.java
@Configuration
@ConfigurationProperties(prefix = "akso.mq")
@Import(ImportMqConfig.class)
public class AksoMqConfiguration {
private List<MqConfig> configs;
...setter and getter for above parameters...
}
- ImportMqConfig.java
public class ImportMqConfig implements ImportBeanDefinitionRegistrar, EnvironmentAware {
private AksoMqConfiguration configuration;
@Override
public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {
for (MqConfig config : configuration.getConfigs()) {
RootBeanDefinition beanDefinition = new RootBeanDefinition();
beanDefinition.setBeanClass(MqConfig.class);
MutablePropertyValues values = new MutablePropertyValues();
values.addPropertyValue("namespace", config.getNamespace());
values.addPropertyValue("servers", config.getServers());
values.addPropertyValue("config", config.getConfig()); //=>if i remove this line of code,everything is working.
beanDefinition.setPropertyValues(values);
registry.registerBeanDefinition(config.getNamespace(), beanDefinition);
}
}
@Override
public void setEnvironment(Environment environment) {
String propertiesName = Objects.requireNonNull(AnnotationUtils.getAnnotation(AksoMqConfiguration.class, ConfigurationProperties.class)).prefix();
configuration = Binder.get(environment).bind(propertiesName, AksoMqConfiguration.class).get();
}
}