【问题标题】:java.lang.IncompatibleClassChangeError while starting a Spring Boot 2.1.1 and Java 11 application启动 Spring Boot 2.1.1 和 Java 11 应用程序时出现 java.lang.IncompatibleClassChangeError
【发布时间】:2020-02-21 11:15:22
【问题描述】:

我在 jdk-11.0.6 上启动 spring-boot 2.1.1.RELEASE 应用程序时收到java.lang.IncompatibleClassChangeError,以便迁移现有的 spring-boot 1.5.3Java 8 的应用程序。

除了这些设置之外,我还使用 2.1.1.RELEASE 覆盖 spring-boot-starter 依赖项的版本,以防止出现不兼容的库问题。除了 Java 11,我还在同一个项目中使用了 groovy 3.0.0-alpha-4

您可以在下面找到详细的堆栈跟踪:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'pathMappedEndpoints' defined in class path resource [org/springframework/boot/actuate/autoconfigure/endpoint/web/WebEndpointAutoConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.boot.actuate.endpoint.web.PathMappedEndpoints]: Factory method 'pathMappedEndpoints' threw exception; nested exception is java.lang.IncompatibleClassChangeError: Method org.springframework.boot.actuate.endpoint.web.PathMapper.__AW_getRootPath(Ljava/util/List;Lorg/springframework/boot/actuate/endpoint/EndpointId;)Ljava/lang/String; must be InterfaceMethodref c
    at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:627)
    at org.springframework.beans.factory.support.ConstructorResolver.__AW_instantiateUsingFactoryMethod(ConstructorResolver.java:607)
    at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1288)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.__AW_createBeanInstance(AbstractAutowireCapableBeanFactory.java:1127)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.__AW_doCreateBean(AbstractAutowireCapableBeanFactory.java:538)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.__AW_createBean(AbstractAutowireCapableBeanFactory.java:498)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java)
    at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:320)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.__AW_getSingleton(DefaultSingletonBeanRegistry.java:222)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java)
    at org.springframework.beans.factory.support.AbstractBeanFactory.__AW_doGetBean(AbstractBeanFactory.java:318)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.__AW_preInstantiateSingletons(DefaultListableBeanFactory.java:846)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java)
    at org.springframework.context.support.AbstractApplicationContext.__AW_finishBeanFactoryInitialization(AbstractApplicationContext.java:863)
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:546)
    at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:142)
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:775)
    at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:397)
    at org.springframework.boot.SpringApplication.__AW_run(SpringApplication.java:316)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java)
    at com.demo.api.Application.__AW_main(Application.java:22)
    at com.demo.api.Application.main(Application.java)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:566)
    at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:48)
    at org.springframework.boot.loader.Launcher.launch(Launcher.java:87)
    at org.springframework.boot.loader.Launcher.launch(Launcher.java:50)
    at org.springframework.boot.loader.JarLauncher.__AW_main(JarLauncher.java:51)
    at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java)
Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.boot.actuate.endpoint.web.PathMappedEndpoints]: Factory method 'pathMappedEndpoints' threw exception; nested exception is java.lang.IncompatibleClassChangeError: Method org.springframework.boot.actuate.endpoint.web.PathMapper.__AW_getRootPath(Ljava/util/List;Lorg/springframework/boot/actuate/endpoint/EndpointId;)Ljava/lang/String; must be InterfaceMethodref c
    at org.springframework.beans.factory.support.SimpleInstantiationStrategy.__AW_instantiate(SimpleInstantiationStrategy.java:185)
    at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java)
    at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:622)
    ... 36 common frames omitted
Caused by: java.lang.IncompatibleClassChangeError: Method org.springframework.boot.actuate.endpoint.web.PathMapper.__AW_getRootPath(Ljava/util/List;Lorg/springframework/boot/actuate/endpoint/EndpointId;)Ljava/lang/String; must be InterfaceMethodref c
    at org.springframework.boot.actuate.endpoint.web.PathMapper.getRootPath(PathMapper.java)
    at org.springframework.boot.actuate.endpoint.web.annotation.ServletEndpointDiscoverer.createEndpoint(ServletEndpointDiscoverer.java:71)
    at org.springframework.boot.actuate.endpoint.web.annotation.ServletEndpointDiscoverer.createEndpoint(ServletEndpointDiscoverer.java:42)
    at org.springframework.boot.actuate.endpoint.annotation.EndpointDiscoverer.getFilterEndpoint(EndpointDiscoverer.java:328)
    at org.springframework.boot.actuate.endpoint.annotation.EndpointDiscoverer.isFilterMatch(EndpointDiscoverer.java:302)
    at org.springframework.boot.actuate.endpoint.annotation.EndpointDiscoverer.isEndpointExposed(EndpointDiscoverer.java:270)
    at org.springframework.boot.actuate.endpoint.annotation.EndpointDiscoverer.convertToEndpoints(EndpointDiscoverer.java:189)
    at org.springframework.boot.actuate.endpoint.annotation.EndpointDiscoverer.discoverEndpoints(EndpointDiscoverer.java:127)
    at org.springframework.boot.actuate.endpoint.annotation.EndpointDiscoverer.getEndpoints(EndpointDiscoverer.java:119)
    at org.springframework.boot.actuate.endpoint.web.PathMappedEndpoints.lambda$getEndpoints$1(PathMappedEndpoints.java:70)
    at java.base/java.util.LinkedHashMap$LinkedValues.forEach(LinkedHashMap.java:608)
    at org.springframework.boot.actuate.endpoint.web.PathMappedEndpoints.getEndpoints(PathMappedEndpoints.java:69)
    at org.springframework.boot.actuate.endpoint.web.PathMappedEndpoints.<init>(PathMappedEndpoints.java:63)
    at org.springframework.boot.actuate.autoconfigure.endpoint.web.WebEndpointAutoConfiguration.pathMappedEndpoints(WebEndpointAutoConfiguration.java:123)
    at org.springframework.boot.actuate.autoconfigure.endpoint.web.WebEndpointAutoConfiguration$$EnhancerBySpringCGLIB$$7e6a4261.CGLIB$pathMappedEndpoints$1(<generated>)
    at org.springframework.boot.actuate.autoconfigure.endpoint.web.WebEndpointAutoConfiguration$$EnhancerBySpringCGLIB$$7e6a4261$$FastClassBySpringCGLIB$$9430a0e5.invoke(<generated>)
    at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:244)
    at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:363)
    at org.springframework.boot.actuate.autoconfigure.endpoint.web.WebEndpointAutoConfiguration$$EnhancerBySpringCGLIB$$7e6a4261.pathMappedEndpoints(<generated>)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:566)
    at org.springframework.beans.factory.support.SimpleInstantiationStrategy.__AW_instantiate(SimpleInstantiationStrategy.java:154)
    ... 38 common frames omitted

【问题讨论】:

    标签: java spring spring-boot java-11 spring-boot-actuator


    【解决方案1】:

    __AW_ 前缀方法建议您使用ApsectWerkzAspectJ。由于错误发生在看起来像自动生成的方法中,很可能是您使用的版本与 Java 11 不兼容。

    您可能应该从将 Groovy 3.0.0-alpha-4 升级到 3.0.1 开始,在调试代码生成问题时使用不稳定库不是一个好主意。

    【讨论】:

    • 嗨,Groovy 3.0.1 与 gmavenplus-plugin 1.6.2 不兼容,所以我们在复杂化过程中出现 NullPointerException 错误。因此,我们将当前的 Groovy 版本保持为 3.0.0-alpha-4。
    • 您似乎有一个复杂的项目设置,其中使用了许多不同的、可能不兼容的库。请添加a Minimal, Reproducible Example 否则是猜测。
    猜你喜欢
    • 2015-03-14
    • 1970-01-01
    • 2020-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-30
    • 2020-06-24
    • 2021-05-18
    相关资源
    最近更新 更多