Подтвердить что ты не робот

"NoClassDefFoundError: GenericApplicationListener" при переключении с Spring Загрузка 1.3.0M1 в 1.3.0M2

В моем 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

Указанный класс добавлен в spring -контекст версии 4.2.0, но при просмотре дерева зависимостей я вижу, что Spring Загрузка 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
4b9b3361

Ответ 1

Spring Boot управляет связкой зависимостей для вас, а позволяет добавлять их без указания версии. Spring Загрузка, очевидно, основана на Spring Framework и использует последние и самые большие, поэтому вы должны избежать любой ценой, чтобы исправить версию фрейма Spring, чтобы использовать себя.

Если вы обновили до более новой версии (чтобы включить исправление ошибки или что-то еще), обязательно удалите переопределение перед обновлением Spring Загрузите, так как новая версия, которую он требует, может быть несовместимой с вашим переопределением.

Если вы используете другие проекты, которые также обеспечивают управление зависимостями в Spring Framework (например, Spring Cloud), убедитесь, что управление зависимостями Spring Boot имеет приоритет. С Maven не забудьте добавить спецификацию spring-boot-dependencies как первую запись в разделе <dependenciesManagement>.

Ответ 2

У меня была такая же проблема, потому что у моего POM был раздел свойств с тегом <spring.version>, скопированным из другого проекта.

Удалите тег <abc.version> в вашем разделе свойств, который может конфликтовать с Spring библиотеками загрузки.

Ответ 3

Caused by: java.lang.NoClassDefFoundError: org/springframework/context/event/GenericApplicationListener

Из приведенной выше ошибки приложение не может найти класс, определенный из зависимостей jar. GenericApplicationListener добавляется из весны версии 4.2.

Обновите версию Spring до версии 4.2 и перепроверьте.