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

Mic*_*mpf 24 spring spring-boot

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

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
Run Code Online (Sandbox Code Playgroud)

在春季上下文版本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
Run Code Online (Sandbox Code Playgroud)

Ste*_*oll 19

Spring Boot为您管理一堆依赖项,并允许您在不指定版本的情况下添加它们.Spring Boot显然是基于Spring Framework并使用最新和最好的,所以你应该不惜一切代价来修复spring框架版本以便自己使用.

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

如果您正在使用其他也在 Spring Framework上提供依赖关系管理的项目(例如Spring Cloud),请确保Spring Boot的依赖关系管理优先.与Maven,请务必将添加spring-boot-dependencies的BOM 第一个条目<dependenciesManagement>部分.


Agu*_*hez 7

我遇到了同样的问题,因为我的POM有一个属性部分,其中包含<spring.version>从另一个项目复制的 标签.

删除<abc.version>属性部分中可能与Spring Boot库冲突的任何标记.


小智 6

Caused by: java.lang.NoClassDefFoundError: org/springframework/context/event/GenericApplicationListener
Run Code Online (Sandbox Code Playgroud)

由于上述错误,应用程序无法从jar依赖项中找到定义的类。GenericApplicationListener是从春季版本4.2添加的。

将您的Spring版本升级到4.2,然后重新检查。