Reputation: 9
I am creating an applicaiton with springboot, backend is also using micronaut and micronaut beans. frontend is using vaadin.
the application start normally and micronaut beans are injected in spring context successfully if i run the application as bootrun or in mvn spring-boot:run
however, when i package the application as bootjar and start the application using java -jar myapp.jar the following error appears:
22:31:25.693 [main] ERROR o.s.boot.SpringApplication - Application run failed
io.micronaut.context.exceptions.NoSuchBeanException: No bean of type [io.micronaut.context.event.ApplicationEventPublisher<io.micronaut.context.event.StartupEvent>] exists.
at io.micronaut.context.DefaultBeanContext.newNoSuchBeanException(DefaultBeanContext.java:2790)
at io.micronaut.context.DefaultApplicationContext.newNoSuchBeanException(DefaultApplicationContext.java:318)
at io.micronaut.context.DefaultBeanContext.resolveBeanRegistration(DefaultBeanContext.java:2753)
at io.micronaut.context.DefaultBeanContext.getBean(DefaultBeanContext.java:1747)
at io.micronaut.context.DefaultBeanContext.getBean(DefaultBeanContext.java:842)
at io.micronaut.context.BeanLocator.getBean(BeanLocator.java:97)
at io.micronaut.context.DefaultBeanContext.publishEvent(DefaultBeanContext.java:1833)
at io.micronaut.context.DefaultBeanContext.start(DefaultBeanContext.java:360)
at io.micronaut.context.DefaultApplicationContext.start(DefaultApplicationContext.java:211)
at io.micronaut.spring.boot.starter.MicronautImportRegistrar.registerBeanDefinitions(MicronautImportRegistrar.java:128)
at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.lambda$loadBeanDefinitionsFromRegistrars$1(ConfigurationClassBeanDefinitionReader.java:376)
at java.base/java.util.LinkedHashMap.forEach(LinkedHashMap.java:721)
at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitionsFromRegistrars(ConfigurationClassBeanDefinitionReader.java:375)
at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitionsForConfigurationClass(ConfigurationClassBeanDefinitionReader.java:148)
at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitions(ConfigurationClassBeanDefinitionReader.java:120)
at org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:429)
at org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:290)
at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanDefinitionRegistryPostProcessors(PostProcessorRegistrationDelegate.java:349)
at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:118)
at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:788)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:606)
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146)
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:754)
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:456)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:334)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1354)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1343)
at co.yaqut.server.user.controlpanel.UsersControlPanelApplication.main(UsersControlPanelApplication.java:21)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:569)
at org.springframework.boot.loader.launch.Launcher.launch(Launcher.java:91)
at org.springframework.boot.loader.launch.Launcher.launch(Launcher.java:53)
at org.springframework.boot.loader.launch.JarLauncher.main(JarLauncher.java:58)
I think something is missing while packaging the application. I am out of ideas . any help would be really great.
An example application is availabel herer https://github.com/firdouserp/micronaut-in-spring
the article i get this all setup is from herer : https://guides.micronaut.io/latest/spring-boot-micronaut-data-gradle-java.html
Upvotes: 0
Views: 73
Reputation: 125158
Doing a quick search leads to this issue in the Micronaut issue tracker. So it appears to be a known issue.
Adding the following solves it.
tasks.bootJar { loaderImplementation = org.springframework.boot.loader.tools.LoaderImplementation.CLASSIC }
Next to that I would suggest to do some housekeeping on your dependencies. You are using platform poms which manage the versions for you, this will reduce the risk of using incompatible versions.
dependencies {
implementation platform("com.vaadin:vaadin-bom:24.4.6")
implementation platform("io.micronaut.platform:micronaut-platform:4.6.3")
annotationProcessor platform("io.micronaut.platform:micronaut-platform:4.6.3")
annotationProcessor("io.micronaut:micronaut-inject-java")
annotationProcessor("io.micronaut.data:micronaut-data-processor")
annotationProcessor("jakarta.annotation:jakarta.annotation-api")
annotationProcessor("jakarta.persistence:jakarta.persistence-api")
implementation("io.micronaut.data:micronaut-data-jdbc")
implementation("io.micronaut.spring:micronaut-spring-boot-starter")
implementation("io.micronaut.sql:micronaut-jdbc-hikari")
implementation("jakarta.annotation:jakarta.annotation-api")
implementation("jakarta.persistence:jakarta.persistence-api")
implementation("org.springframework.boot:spring-boot-starter-web")
implementation("jakarta.annotation:jakarta.annotation-api")
//implementation("com.vaadin:vaadin-core")
// https://mvnrepository.com/artifact/com.vaadin/vaadin-spring-boot-starter
implementation 'com.vaadin:vaadin-spring-boot-starter'
implementation fileTree(dir: 'libs', includes: ['*.jar'])
runtimeOnly("com.h2database:h2")
testImplementation("org.springframework.boot:spring-boot-starter-test")
}
This mix appears to be working.
Upvotes: 0