java - 由 : java. lang.ClassNotFoundException : org. springframework.web.servlet.config.annotation.AsyncSupportConfigurer 引起

标签 java spring hibernate spring-boot spring-mvc

尝试将旧应用程序转换为 Spring Boot 应用程序并收到上述错误。我已经看到很多关于缺少依赖项的线程,但我不确定我缺少哪一个,如果我确实一开始就缺少一个?代码的任何其他部分都没有丢失任何库,但我显然丢失了一些东西?或者再想一想,我是否导入了不必要的依赖项,这些依赖项使应用程序变得困惑,使其无法启动?

请参阅下面的 gradle.build 的编辑片段,其中包含依赖项以及堆栈跟踪的编辑列表。

dependencies {
    compile group: 'javax.mail', name: 'mail', version:'1.4.1'
    compile group: 'com.google.code.gson', name: 'gson', version:'2.3'
    compile group: 'commons-codec', name: 'commons-codec', version:'20041127.091804'
    compile group: 'org.jsoup', name: 'jsoup', version:'1.7.2'
    compile group: 'commons-io', name: 'commons-io', version:'2.5'
    compile group: 'org.apache.commons', name: 'commons-lang3', version:'3.5'
    compile group: 'org.apache.httpcomponents', name: 'httpclient', version:'4.3.5'
    compile group: 'org.json', name: 'json', version:'20140107'
    compile group: 'com.itextpdf.tool', name: 'xmlworker', version:'5.5.6'
    compile group: 'log4j', name: 'log4j', version:'1.2.17'
    compile group: 'org.quartz-scheduler', name: 'quartz', version:'2.2.1'
    compile group: 'org.quartz-scheduler', name: 'quartz-jobs', version:'2.2.1'
    compile group: 'org.springframework', name: 'spring-context-support', version:'3.1.3.RELEASE'
    compile group: 'org.springframework', name: 'spring-webmvc', version:'3.1.0.RELEASE'
    compile group: 'org.springframework', name: 'spring-tx', version:'3.1.0.RELEASE'
    compile group: 'org.springframework', name: 'spring-jdbc', version:'4.0.6.RELEASE'
    compile group: 'c3p0', name: 'c3p0', version:'0.9.1.2'
    compile group: 'mssqlserver', name: 'sqljdbc4', version:'3.0'
    compile group: 'org.springframework.boot', name: 'spring-boot-gradle-plugin', version: '2.1.6.RELEASE', ext: 'pom'
    compile 'org.springframework.boot:spring-boot-starter-actuator'
    compile 'org.springframework.boot:spring-boot-starter-data-jpa'
    compile 'org.springframework.boot:spring-boot-starter-actuator'
    compile 'org.springframework.boot:spring-boot-starter-web'
    compile group: 'org.springframework', name: 'spring-orm', version: '2.5.1'
    compile group: 'org.springframework', name: 'spring-orm', version: '4.3.18.RELEASE'

}

java.lang.IllegalStateException: Could not evaluate condition on org.springframework.boot.actuate.autoconfigure.EndpointWebMvcAutoConfiguration$EndpointWebMvcConfiguration due to org/springframework/web/servlet/config/annotation/AsyncSupportConfigurer not found. Make sure your own configuration does not rely on that class. This can also happen if you are @ComponentScanning a springframework package (e.g. if you put a @ComponentScan in the default package by mistake)
    at org.springframework.boot.autoconfigure.condition.SpringBootCondition.matches(SpringBootCondition.java:55) ~[spring-boot-autoconfigure-1.5.14.RELEASE.jar:1.5.14.RELEASE]
    at org.springframework.context.annotation.ConditionEvaluator.shouldSkip(ConditionEvaluator.java:102) ~[spring-context-4.3.18.RELEASE.jar:4.3.18.RELEASE]
    at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader$TrackedConditionEvaluator.shouldSkip(ConfigurationClassBeanDefinitionReader.java:444) ~[spring-context-4.3.18.RELEASE.jar:4.3.18.RELEASE]
    etc...
    at com.dish.wfm.controller.SamsungUpdateJobApplication.main(SamsungUpdateJobApplication.java:17) [classes/:na]
Caused by: java.lang.NoClassDefFoundError: org/springframework/web/servlet/config/annotation/AsyncSupportConfigurer
    at java.lang.Class.getDeclaredMethods0(Native Method) ~[na:1.8.0_211]
    at java.lang.Class.privateGetDeclaredMethods(Class.java:2701) ~[na:1.8.0_211]
    at java.lang.Class.getDeclaredMethods(Class.java:1975) ~[na:1.8.0_211]
    etc...
Caused by: java.lang.ClassNotFoundException: org.springframework.web.servlet.config.annotation.AsyncSupportConfigurer
    at java.net.URLClassLoader.findClass(URLClassLoader.java:382) ~[na:1.8.0_211]
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424) ~[na:1.8.0_211]
    ... 36 common frames omitted

org.springframework.beans.factory.CannotLoadBeanClassException: Error loading class [org.springframework.boot.autoconfigure.web.WebMvcAutoConfiguration$EnableWebMvcConfiguration] for bean with name 'org.springframework.boot.autoconfigure.web.WebMvcAutoConfiguration$EnableWebMvcConfiguration': problem with class file or dependent class; nested exception is java.lang.VerifyError: class org.springframework.boot.autoconfigure.web.WebMvcAutoConfiguration$EnableWebMvcConfiguration overrides final method configureHandlerExceptionResolvers.(Ljava/util/List;)V
    at org.springframework.beans.factory.support.AbstractBeanFactory.resolveBeanClass(AbstractBeanFactory.java:1394) ~[spring-beans-4.3.18.RELEASE.jar:4.3.18.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.determineTargetType(AbstractAutowireCapableBeanFactory.java:641) ~[spring-beans-4.3.18.RELEASE.jar:4.3.18.RELEASE] 
    etc...
Caused by: java.lang.VerifyError: class org.springframework.boot.autoconfigure.web.WebMvcAutoConfiguration$EnableWebMvcConfiguration overrides final method configureHandlerExceptionResolvers.(Ljava/util/List;)V
    at java.lang.ClassLoader.defineClass1(Native Method) ~[na:1.8.0_211]
    at java.lang.ClassLoader.defineClass(ClassLoader.java:763) ~[na:1.8.0_211]
    etc...

最佳答案

你的依赖关系有点困惑。您具有已由 spring-boot-starter-* 管理的依赖项依赖关系。但是,您正在使用手册 org.springframework 覆盖那些内容来自不同 Spring 版本的依赖关系。您正在混合 2.5.1、3.1.0、3.1.3、4.0.6 和 4.1.3。混合来自任何框架的不同版本的 jar 是一个坏主意,它们通常是不兼容的。

要修复,请删除 org.springframework依赖项,这些干扰/破坏 Spring Boot 管理的依赖项。

接下来你不需要spring-boot-gradle-plugin作为依赖项,最后是 javax.mail东西是 spring-boot-starter-mail 的一部分。

这将产生以下依赖项列表

dependencies {
    compile group: 'com.google.code.gson', name: 'gson', version:'2.3'
    compile group: 'commons-codec', name: 'commons-codec', version:'20041127.091804'
    compile group: 'org.jsoup', name: 'jsoup', version:'1.7.2'
    compile group: 'commons-io', name: 'commons-io', version:'2.5'
    compile group: 'org.apache.commons', name: 'commons-lang3', version:'3.5'
    compile group: 'org.apache.httpcomponents', name: 'httpclient', version:'4.3.5'
    compile group: 'org.json', name: 'json', version:'20140107'
    compile group: 'com.itextpdf.tool', name: 'xmlworker', version:'5.5.6'
    compile group: 'log4j', name: 'log4j', version:'1.2.17'
    compile group: 'org.quartz-scheduler', name: 'quartz', version:'2.2.1'
    compile group: 'org.quartz-scheduler', name: 'quartz-jobs', version:'2.2.1'
    compile group: 'c3p0', name: 'c3p0', version:'0.9.1.2'
    compile group: 'mssqlserver', name: 'sqljdbc4', version:'3.0'

    compile 'org.springframework.boot:spring-boot-starter-actuator'
    compile 'org.springframework.boot:spring-boot-starter-data-jpa'
    compile 'org.springframework.boot:spring-boot-starter-actuator'
    compile 'org.springframework.boot:spring-boot-starter-web'
    compile 'org.springframework.boot:spring-boot-starter-mail'

}

注释

根据您使用的 Spring Boot 版本,您还可以使用 spring-boot-starter-quartz对于quartz(或从依赖项中删除 version 元素)。

Spring Boot 2.x 不支持 log4j 1,因此您可能需要将其替换为 logback(默认)或 log4j2(使用 spring-boot-starter-log4j2 依赖项)。

我还建议用默认的 HikariCP 替换 C3P0(可以节省依赖,并且是一个更好的连接池)。

您还可以删除 version来自 GSON 依赖项,因为 Spring Boot 也管理它(这样你就有了一个兼容的版本)。

关于java - 由 : java. lang.ClassNotFoundException : org. springframework.web.servlet.config.annotation.AsyncSupportConfigurer 引起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57384053/

相关文章:

java - 将 Adob​​e CQ 5 连接到外部数据库?

java - 无法实例化类型 [简单类型,类 java.time.LocalDate

java - 何时使用 XA 数据源和非 XA 数据源

spring - Tomcat 服务器 : org. apache.catalina.core.ContainerBase.addChildInternal ContainerBase.addChild:

mysql - 带连接的 spring data jpa native 查询

java - 检查数据库中是否存在记录(来自大量数据)的有效方法(JPA/Hibernate)

java - PdfBox - 使用获取字体信息

java - 将域映射到 Tomcat 应用程序

java - 在 Java 中使用 OpenSAML 的 ADFS 和 SAML 2.0

java - Spring Boot 不从 application.properties 加载用户名