spring-boot-actuator-autoconfigure has implicit dependency to spring-web.
The org.springframework.boot.actuate.autoconfigure.tracing.zipkin.ZipkinHttpClientSender class from spring-boot-actuator-autoconfigure has a reference to org.springframework.http.HttpHeaders, but the dependency can not be found in the POM.
Reproduce
Create an empty spring boot starter project and add following dependency only.
@SpringBootApplication
public class ActuatorTestApplication implements ApplicationRunner {
public static void main(String[] args) {
SpringApplication app = new SpringApplicationBuilder(ActuatorTestApplication.class)
.headless(true).bannerMode(Mode.OFF).web(WebApplicationType.NONE)
.logStartupInfo(false).build();
if (app.getWebApplicationType() == WebApplicationType.NONE) {
System.exit(SpringApplication.exit(app.run(args)));
} else {
app.run(args);
}
}
@Override
public void run(ApplicationArguments args) throws Exception {
// do nothing
}
}
When application start, exception is thrown.
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'httpClientSender' defined in class path resource [org/springframework/boot/actuate/autoconfigure/tracing/zipkin/ZipkinConfigurations$HttpClientSenderConfiguration.class]: Post-processing of merged bean definition failed
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:577) ~[spring-beans-6.1.11.jar:6.1.11]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:522) ~[spring-beans-6.1.11.jar:6.1.11]
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:337) ~[spring-beans-6.1.11.jar:6.1.11]
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-6.1.11.jar:6.1.11]
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:335) ~[spring-beans-6.1.11.jar:6.1.11]
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) ~[spring-beans-6.1.11.jar:6.1.11]
at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:254) ~[spring-beans-6.1.11.jar:6.1.11]
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1443) ~[spring-beans-6.1.11.jar:6.1.11]
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1353) ~[spring-beans-6.1.11.jar:6.1.11]
at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:904) ~[spring-beans-6.1.11.jar:6.1.11]
at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:782) ~[spring-beans-6.1.11.jar:6.1.11]
... 90 common frames omitted
Caused by: java.lang.IllegalStateException: Failed to introspect Class [org.springframework.boot.actuate.autoconfigure.tracing.zipkin.ZipkinHttpClientSender] from ClassLoader [jdk.internal.loader.ClassLoaders$AppClassLoader@251a69d7]
at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:483) ~[spring-core-6.1.11.jar:6.1.11]
at org.springframework.util.ReflectionUtils.doWithLocalMethods(ReflectionUtils.java:320) ~[spring-core-6.1.11.jar:6.1.11]
at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.buildLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:297) ~[spring-beans-6.1.11.jar:6.1.11]
at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.findLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:274) ~[spring-beans-6.1.11.jar:6.1.11]
at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.findLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:203) ~[spring-beans-6.1.11.jar:6.1.11]
at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(InitDestroyAnnotationBeanPostProcessor.java:182) ~[spring-beans-6.1.11.jar:6.1.11]
at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(CommonAnnotationBeanPostProcessor.java:311) ~[spring-context-6.1.11.jar:6.1.11]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyMergedBeanDefinitionPostProcessors(AbstractAutowireCapableBeanFactory.java:1103) ~[spring-beans-6.1.11.jar:6.1.11]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:574) ~[spring-beans-6.1.11.jar:6.1.11]
... 100 common frames omitted
Caused by: java.lang.NoClassDefFoundError: org/springframework/http/HttpHeaders
at java.base/java.lang.Class.getDeclaredMethods0(Native Method) ~[na:na]
at java.base/java.lang.Class.privateGetDeclaredMethods(Class.java:3402) ~[na:na]
at java.base/java.lang.Class.getDeclaredMethods(Class.java:2504) ~[na:na]
at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:465) ~[spring-core-6.1.11.jar:6.1.11]
... 108 common frames omitted
Caused by: java.lang.ClassNotFoundException: org.springframework.http.HttpHeaders
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) ~[na:na]
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) ~[na:na]
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:525) ~[na:na]
... 112 common frames omitted
I'm not familiar with OpenTelemetry and not sure if spring-web a hard requirement, but I expect if the dependency is optional then no initialization should happen.
Problem
spring-boot-actuator-autoconfigure
has implicit dependency tospring-web
.The
org.springframework.boot.actuate.autoconfigure.tracing.zipkin.ZipkinHttpClientSender
class from spring-boot-actuator-autoconfigure has a reference toorg.springframework.http.HttpHeaders
, but the dependency can not be found in the POM.Reproduce
Create an empty spring boot starter project and add following dependency only.
And write a minimum non-web spring application.
When application start, exception is thrown.
I'm not familiar with OpenTelemetry and not sure if spring-web a hard requirement, but I expect if the dependency is optional then no initialization should happen.