"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
Ответы
Ответ 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 и перепроверьте.