spring - 从 Spring Boot 1.3.0M1 切换到 1.3.0M2 时出现 "NoClassDefFoundError: GenericApplicationListener"

标签 spring spring-boot

在我的 Spring Starter 创建的 Soring Boot 应用程序中,我从 Spring Boot 1.3.0M1 切换到 1.3.0M2。尝试启动应用程序时(从 STS 3.7.0 或通过 spring-boot:run 在命令行中)我得到以下异常:

java.lang.reflect.InvocationTargetException
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:497)
        at org.springframework.boot.maven.AbstractRunMojo$LaunchRunner.run(AbstractRunMojo.java:435)
        at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.IllegalArgumentException: Cannot instantiate interface org.springframework.context.ApplicationListener : org.springframework.boot.logging.ClasspathLoggingApplicationListener
        at org.springframework.boot.SpringApplication.getSpringFactoriesInstances(SpringApplication.java:385)
        at org.springframework.boot.SpringApplication.getSpringFactoriesInstances(SpringApplication.java:362)
        at org.springframework.boot.SpringApplication.initialize(SpringApplication.java:231)
        at org.springframework.boot.SpringApplication.<init>(SpringApplication.java:206)
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:971)
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:960)
        at com.daimler.daivb.services.application.dummyservice.DummyServiceApplication.main(DummyServiceApplication.java:18)
        ... 6 more
Caused by: java.lang.NoClassDefFoundError: org/springframework/context/event/GenericApplicationListener
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:760)
        at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
        at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
        at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
        at org.springframework.util.ClassUtils.forName(ClassUtils.java:250)
        at org.springframework.boot.SpringApplication.getSpringFactoriesInstances(SpringApplication.java:378)
        ... 12 more
Caused by: java.lang.ClassNotFoundException: org.springframework.context.event.GenericApplicationListener
        at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
        ... 25 more

提到的类已经添加到 spring-context 版本 4.2.0 但是当查看依赖树时,我可以看到 Spring Boot 1.3.0M2 仍然依赖于 spring-context 4.1.6:

[INFO] com.company.services.application:dummyservice:war:0.0.1-SNAPSHOT
[INFO] +- org.springframework.boot:spring-boot-devtools:jar:1.3.0.M2:compile
[INFO] |  +- org.springframework.boot:spring-boot:jar:1.3.0.M2:compile
[INFO] |  |  \- org.springframework:spring-context:jar:4.1.6.RELEASE:compile
[INFO] |  \- org.springframework.boot:spring-boot-autoconfigure:jar:1.3.0.M2:compile
[INFO] |     \- org.yaml:snakeyaml:jar:1.15:compile

最佳答案

Spring Boot 为您和 allows you to add them without specifying the version 管理一堆依赖项. Spring Boot 显然是基于 Spring Framework 并使用最新最好的,因此您应该不惜一切代价避免修复 Spring Framework 版本以供自己使用。

如果您已升级到较新版本(包括错误修复或其他内容),请确保在升级 Spring Boot 之前删除覆盖,因为它所需的新版本可能与您的覆盖不兼容.

如果您正在使用其他在 Spring Framework 上提供依赖管理的项目(例如 Spring Cloud),请确保 Spring Boot 的依赖管理优先。使用 Maven,请确保添加 spring-boot-dependencies BOM 为 the first entry in the <dependenciesManagement> section .

关于spring - 从 Spring Boot 1.3.0M1 切换到 1.3.0M2 时出现 "NoClassDefFoundError: GenericApplicationListener",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31489947/

相关文章:

java - Spring @Required 注释没有按预期工作

java - PropertyPlaceHolderConfigurer 不读取 Tomcat 上下文 XML

java - Spring Cloud 流卡夫卡 : Duplicate @StreamListener mapping for 'input'

java - 带有 MultiTenantConnectionProvider 的 Springboot Multi-Tenancy 总是抛出 org.apache.tomcat.jdbc.pool.PoolExhaustedException :

java - 无法将 Spring Boot Admin Server 2 和 Spring Boot Admin Client 2 与 Spring Boot 2 集成在单个应用程序中

spring-boot - Hystrix Command注解在应用中是如何工作的

java - Maven Spring Boot 应用程序启动失败 - JmxAutoConfiguration.mbeanExporter

java - application.yaml 文件设置字段带有 OR 条件(提供默认值)

java - spring中使用k8s configmap

java - Hibernate约束违反异常挂起sql server