I have an app running a simple route with apache camel and springboot, it compiles and runs fine when I run it as a springboot app:
2023-03-30T16:20:18.278Z INFO 104320 --- [ restartedMain] .e.DevToolsPropertyDefaultsPostProcessor : Devtools property defaults active! Set 'spring.devtools.add-properties' to 'false' to disable
2023-03-30T16:20:18.278Z INFO 104320 --- [ restartedMain] .e.DevToolsPropertyDefaultsPostProcessor : For additional web related logging consider setting the 'logging.level.web' property to 'DEBUG'
2023-03-30T16:20:28.682Z INFO 104320 --- [ restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http)
2023-03-30T16:20:28.756Z INFO 104320 --- [ restartedMain] o.apache.catalina.core.StandardService : Starting service [Tomcat]
2023-03-30T16:20:28.756Z INFO 104320 --- [ restartedMain] o.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/10.1.7]
2023-03-30T16:20:29.085Z INFO 104320 --- [ restartedMain] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
2023-03-30T16:20:29.087Z INFO 104320 --- [ restartedMain] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 10804 ms
2023-03-30T16:20:35.686Z INFO 104320 --- [ restartedMain] o.s.b.d.a.OptionalLiveReloadServer : LiveReload server is running on port 35729
2023-03-30T16:20:35.856Z INFO 104320 --- [ restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path ''
2023-03-30T16:20:37.557Z INFO 104320 --- [ restartedMain] o.a.c.impl.engine.AbstractCamelContext : Apache Camel 4.0.0-M2 (camel-1) is starting
2023-03-30T16:20:37.603Z INFO 104320 --- [ restartedMain] c.s.b.CamelSpringBootApplicationListener : Starting CamelMainRunController to ensure the main thread keeps running
2023-03-30T16:20:37.604Z INFO 104320 --- [inRunController] org.apache.camel.main.MainSupport : Apache Camel (Main) 4.0.0-M2 is starting
2023-03-30T16:20:37.670Z INFO 104320 --- [ restartedMain] o.a.c.impl.engine.AbstractCamelContext : Routes startup (started:1)
2023-03-30T16:20:37.670Z INFO 104320 --- [ restartedMain] o.a.c.impl.engine.AbstractCamelContext : Started route1 (file://files/input)
2023-03-30T16:20:37.670Z INFO 104320 --- [ restartedMain] o.a.c.impl.engine.AbstractCamelContext : Apache Camel 4.0.0-M2 (camel-1) started in 1s928ms (build:443ms init:1s385ms start:100ms)
2023-03-30T16:20:37.682Z INFO 104320 --- [ restartedMain] com.graalvm.test.TestApplication : Started TestApplication in 22.772 seconds (process running for 24.892)
But when I try to run it after being compiled as a native app with graalvm and native-image (using gradle nativeCompile
) I get the following error:
2023-03-30T15:29:22.078Z INFO 63467 --- [ main] com.graalvm.test.TestApplication : No active profile set, falling back to 1 default profile: "default"
2023-03-30T15:29:22.241Z INFO 63467 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http)
2023-03-30T15:29:22.283Z INFO 63467 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
2023-03-30T15:29:22.283Z INFO 63467 --- [ main] o.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/10.1.7]
2023-03-30T15:29:22.346Z INFO 63467 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
2023-03-30T15:29:22.346Z INFO 63467 --- [ main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 268 ms
2023-03-30T15:29:22.531Z WARN 63467 --- [ main] w.s.c.ServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'applicationController': Instantiation of supplied bean failed
2023-03-30T15:29:22.531Z WARN 63467 --- [ main] o.a.c.s.boot.SpringBootCamelContext : CamelContext has only been running for less than a second. If you intend to run Camel for a longer time then you can set the property camel.springboot.main-run-controller=true in application.properties or add spring-boot-starter-web JAR to the classpath.
2023-03-30T15:29:22.531Z INFO 63467 --- [ main] o.a.c.impl.engine.AbstractCamelContext : Apache Camel (camel-1) is shutting down (timeout:45s)
2023-03-30T15:29:22.531Z INFO 63467 --- [ main] o.a.c.impl.engine.AbstractCamelContext : Routes stopped (stopped:0)
2023-03-30T15:29:22.531Z INFO 63467 --- [ main] o.a.c.impl.engine.AbstractCamelContext : Apache Camel (camel-1) shutdown in 0ms (uptime:)
2023-03-30T15:29:22.531Z INFO 63467 --- [ main] o.apache.catalina.core.StandardService : Stopping service [Tomcat]
2023-03-30T15:29:22.532Z ERROR 63467 --- [ main] o.s.boot.SpringApplication : Application run failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'applicationController': Instantiation of supplied bean failed
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.obtainFromSupplier(AbstractAutowireCapableBeanFactory.java:1220) ~[testApp:6.0.7]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1158) ~[testApp:6.0.7]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:560) ~[testApp:6.0.7]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:520) ~[testApp:6.0.7]
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) ~[testApp:6.0.7]
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[testApp:6.0.7]
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) ~[testApp:6.0.7]
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) ~[testApp:6.0.7]
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:973) ~[testApp:6.0.7]
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:917) ~[testApp:6.0.7]
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) ~[testApp:6.0.7]
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146) ~[testApp:3.0.5]
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) ~[testApp:3.0.5]
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) ~[testApp:3.0.5]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) ~[testApp:3.0.5]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1304) ~[testApp:3.0.5]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1293) ~[testApp:3.0.5]
at com.graalvm.test.TestApplication.main(TestApplication.java:12) ~[testApp:na]
Caused by: java.lang.RuntimeException: Error loading catalog information from classpath
at org.apache.camel.main.MainHelper.<init>(MainHelper.java:73) ~[na:na]
at org.apache.camel.main.BaseMainSupport.<init>(BaseMainSupport.java:114) ~[testApp:4.0.0-M2]
at org.apache.camel.main.MainSupport.<init>(MainSupport.java:60) ~[testApp:4.0.0-M2]
at org.apache.camel.main.MainCommandLineSupport.<init>(MainCommandLineSupport.java:47) ~[testApp:4.0.0-M2]
at org.apache.camel.main.Main.<init>(Main.java:41) ~[testApp:4.0.0-M2]
at org.apache.camel.spring.boot.CamelSpringBootApplicationController$CamelSpringMain.<init>(CamelSpringBootApplicationController.java:78) ~[na:na]
at org.apache.camel.spring.boot.CamelSpringBootApplicationController.<init>(CamelSpringBootApplicationController.java:35) ~[testApp:na]
at org.apache.camel.spring.boot.CamelAutoConfiguration.applicationController(CamelAutoConfiguration.java:197) ~[testApp:na]
at org.apache.camel.spring.boot.CamelAutoConfiguration__BeanDefinitions.lambda$getApplicationControllerInstanceSupplier$1(CamelAutoConfiguration__BeanDefinitions.java:56) ~[na:na]
at org.springframework.util.function.ThrowingBiFunction.apply(ThrowingBiFunction.java:68) ~[testApp:6.0.7]
at org.springframework.util.function.ThrowingBiFunction.apply(ThrowingBiFunction.java:54) ~[testApp:6.0.7]
at org.springframework.beans.factory.aot.BeanInstanceSupplier.lambda$get$2(BeanInstanceSupplier.java:204) ~[na:na]
at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:58) ~[testApp:6.0.7]
at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:46) ~[testApp:6.0.7]
at org.springframework.beans.factory.aot.BeanInstanceSupplier.invokeBeanSupplier(BeanInstanceSupplier.java:216) ~[na:na]
at org.springframework.beans.factory.aot.BeanInstanceSupplier.get(BeanInstanceSupplier.java:204) ~[na:na]
at org.springframework.beans.factory.support.DefaultListableBeanFactory.obtainInstanceFromSupplier(DefaultListableBeanFactory.java:947) ~[testApp:6.0.7]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.obtainFromSupplier(AbstractAutowireCapableBeanFactory.java:1214) ~[testApp:6.0.7]
... 17 common frames omitted
Caused by: java.lang.NullPointerException: null
at java.base@17.0.6/java.io.Reader.<init>(Reader.java:168) ~[testApp:na]
at java.base@17.0.6/java.io.InputStreamReader.<init>(InputStreamReader.java:76) ~[testApp:na]
at org.apache.camel.main.MainHelper.loadLines(MainHelper.java:445) ~[na:na]
at org.apache.camel.main.MainHelper.<init>(MainHelper.java:62) ~[na:na]
... 34 common frames omitted
My OS: Ubuntu - 20.04.6 LTS
My gradle file is as follows:
plugins {
id 'java'
id 'org.springframework.boot' version '3.0.5'
id 'io.spring.dependency-management' version '1.1.0'
id 'org.graalvm.buildtools.native' version '0.9.18'
}
group = 'com.graalvm'
version = '1.0'
sourceCompatibility = '17'
configurations {
compileOnly {
extendsFrom annotationProcessor
}
}
graalvmNative {
binaries {
main {
imageName = 'testApp'
mainClass = 'com.graalvm.test.TestApplication'
}
}
}
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter'
implementation 'org.apache.camel.springboot:camel-core-starter:4.0.0-M2'
implementation 'org.springframework.boot:spring-boot-starter-web:3.0.5'
implementation 'org.apache.camel.springboot:camel-spring-boot-bom:4.0.0-M2'
implementation 'org.apache.camel:camel-file:4.0.0-M2'
compileOnly 'org.projectlombok:lombok'
developmentOnly 'org.springframework.boot:spring-boot-devtools'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
tasks.named('test') {
useJUnitPlatform()
}
My application.properties:
camel.springboot.main-run-controller=true
I appreciate any help or suggestion