I am using Spring Boot 3.0.13 with JDK 17. I am creating the spring boot executable jar like below
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<mainClass>com.sp.obt.supplier.SupplierApplication</mainClass>
<classifier>exec</classifier>
</configuration>
</plugin>
I have a dependency like below
<dependency>
<groupId>com.sp</groupId>
<artifactId>codegen</artifactId>
<version>1.1.1001-SNAPSHOT</version>
</dependency>
On trying to execute the supplier fat jar with the below command
java --add-modules jdk.incubator.foreign --add-opens java.base/java.lang=ALL-UNNAMED --add-opens java.base/java.math=ALL-UNNAMED --add-opens java.base/java.util=ALL-UNNAMED --add-opens java.base/java.util.concurrent=ALL-UNNAMED --add-opens java.base/java.net=ALL-UNNAMED --add-opens java.base/java.text=ALL-UNNAMED --add-opens java.sql/java.sql=ALL-UNNAMED --add-opens java.base/java.time=ALL-UNNAMED -Djava.rmi.server.hostname=localhost -XX:TieredStopAtLevel=1 -noverify -Dspring.output.ansi.enabled=always -Dcom.sun.management.jmxremote -Dspring.jmx.enabled=true -Dspring.liveBeansView.mbeanDomain -Dspring.application.admin.enabled=true -Dfile.encoding=UTF-8 -jar supplier-0.0.1-SNAPSHOT-exec.jar
I am getting the below error
org.springframework.beans.factory.BeanDefinitionStoreException: Failed to process import candidates for configuration class [com.sp.obt.supplier.SupplierApplication]: Failed to introspect Class [com.sp.qbr.mappers.QantasLoyaltyRequestMapper] from ClassLoader [org.springframework.boot.loader.LaunchedURLClassLoader@7c29daf3]
at org.springframework.context.annotation.ConfigurationClassParser.processImports(ConfigurationClassParser.java:527)
at org.springframework.context.annotation.ConfigurationClassParser.doProcessConfigurationClass(ConfigurationClassParser.java:304)
at org.springframework.context.annotation.ConfigurationClassParser.processConfigurationClass(ConfigurationClassParser.java:243)
at org.springframework.context.annotation.ConfigurationClassParser.parse(ConfigurationClassParser.java:196)
at org.springframework.context.annotation.ConfigurationClassParser.parse(ConfigurationClassParser.java:164)
at org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:415)
at org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:287)
at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanDefinitionRegistryPostProcessors(PostProcessorRegistrationDelegate.java:344)
at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:115)
at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:779)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:597)
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146)
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:733)
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:435)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:311)
at org.springframework.boot.builder.SpringApplicationBuilder.run(SpringApplicationBuilder.java:150)
at com.sp.obt.supplier.SupplierApplication.main(SupplierApplication.java:184)
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:568)
at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:49)
at org.springframework.boot.loader.Launcher.launch(Launcher.java:95)
at org.springframework.boot.loader.Launcher.launch(Launcher.java:58)
at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:65)
Caused by: java.lang.IllegalStateException: Failed to introspect Class [com.sp.qbr.mappers.QantasLoyaltyRequestMapper] from ClassLoader [org.springframework.boot.loader.LaunchedURLClassLoader@7c29daf3]
at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:483)
at org.springframework.util.ReflectionUtils.doWithLocalMethods(ReflectionUtils.java:320)
at org.springframework.core.type.StandardAnnotationMetadata.getAnnotatedMethods(StandardAnnotationMetadata.java:149)
at org.springframework.context.annotation.ConfigurationClassParser.retrieveBeanMethodMetadata(ConfigurationClassParser.java:396)
at org.springframework.context.annotation.ConfigurationClassParser.doProcessConfigurationClass(ConfigurationClassParser.java:319)
at org.springframework.context.annotation.ConfigurationClassParser.processConfigurationClass(ConfigurationClassParser.java:243)
at org.springframework.context.annotation.ConfigurationClassParser.processImports(ConfigurationClassParser.java:517)
... 24 common frames omitted
Caused by: java.lang.NoClassDefFoundError: com/sp/obt/supplier/qantas/codegen/qbr/EarnQuoteRequest
at java.base/java.lang.Class.getDeclaredMethods0(Native Method)
at java.base/java.lang.Class.privateGetDeclaredMethods(Class.java:3402)
at java.base/java.lang.Class.getDeclaredMethods(Class.java:2504)
at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:465)
... 30 common frames omitted
Caused by: java.lang.ClassNotFoundException: com.sp.obt.supplier.qantas.codegen.qbr.EarnQuoteRequest
at java.base/java.net.URLClassLoader.findClass(URLClassLoader.java:445)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:587)
at org.springframework.boot.loader.LaunchedURLClassLoader.loadClass(LaunchedURLClassLoader.java:149)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520)
... 34 common frames omitted
I can see the codegen-1.1.1001-SNAPSHOT
dependency present inside the supplier-0.0.1-SNAPSHOT-exec.jar
fat jar
debrajmanna@MAC-DEBRAJMANNA-DX6QR261G3 target % jar -tf supplier-0.0.1-SNAPSHOT-exec.jar | grep 'BOOT-INF/lib/codegen-1.1.1001-SNAPSHOT.jar'
BOOT-INF/lib/codegen-1.1.1001-SNAPSHOT.jar
If I untar the supplier fat jar and search the class inside codegen-1.1.1001-SNAPSHOT.jar, I can see the relevant class present inside it.
debrajmanna@MAC-DEBRAJMANNA-DX6QR261G3 target % mkdir /tmp/supplier
debrajmanna@MAC-DEBRAJMANNA-DX6QR261G3 target % cp supplier-0.0.1-SNAPSHOT-exec.jar /tmp/supplier
debrajmanna@MAC-DEBRAJMANNA-DX6QR261G3 target % cd /tmp/supplier
debrajmanna@MAC-DEBRAJMANNA-DX6QR261G3 supplier % jar -xf supplier-0.0.1-SNAPSHOT-exec.jar
debrajmanna@MAC-DEBRAJMANNA-DX6QR261G3 supplier % ls
BOOT-INF META-INF org supplier-0.0.1-SNAPSHOT-exec.jar
debrajmanna@MAC-DEBRAJMANNA-DX6QR261G3 supplier % cd BOOT-INF
debrajmanna@MAC-DEBRAJMANNA-DX6QR261G3 BOOT-INF % ls
classes classpath.idx layers.idx lib
debrajmanna@MAC-DEBRAJMANNA-DX6QR261G3 BOOT-INF % cd lib
debrajmanna@MAC-DEBRAJMANNA-DX6QR261G3 lib % jar -tf codegen-1.1.1001-SNAPSHOT.jar | grep EarnQuoteReques
com/sp/obt/supplier/qantas/codegen/qbr/EarnQuoteRequest.class
com/sp/obt/supplier/qantas/codegen/qbr/EarnQuoteRequest$PointsClubLevelEnum.class
com/sp/obt/supplier/qantas/codegen/qbr/EarnQuoteRequest$QbrLevelEnum.class
com/sp/obt/supplier/qantas/codegen/qbr/EarnQuoteRequest$TiersEnum.class
Can someone suggest what could be going wrong here?