2015-07-18 16 views
22

Trong Spring Starter đã tạo ứng dụng Soring Boot, tôi đã chuyển từ Spring Boot 1.3.0M1 thành 1.3.0M2. Khi cố gắng để khởi động ứng dụng (hoặc từ STS 3.7.0 hoặc qua lò xo khởi động: chạy tại dòng lệnh) tôi nhận được ngoại lệ sau đây:"NoClassDefFoundError: GenericApplicationListener" khi chuyển từ Spring Boot 1.3.0M1 sang 1.3.0M2

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 

Lớp nêu đã được thêm vào trong phiên bản mùa xuân-bối cảnh 4.2 .0 nhưng khi nhìn vào cây phụ thuộc tôi có thể thấy rằng mùa xuân Boot 1.3.0M2 vẫn phụ thuộc vào mùa xuân-bối cảnh 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 
+0

Cố gắng thêm phụ thuộc vào ngữ cảnh mùa xuân 4.2.0.RC3 một cách rõ ràng, bằng cách loại trừ phụ thuộc transitive 4.1.6, dẫn đến lỗi sau: 'Gây ra bởi: java.lang.NoSuchMethodError: org.springframework.beans. factory.config.ConfigurableBeanFactory.getSingletonMutex() Ljava/lang/Object; ' – mrumpf

+3

Spring Boot 4.1 nên sử dụng Spring 4.2 đảm bảo bạn không chỉ định thuộc tính' spring.version' trong pom của bạn hoặc có một số phụ thuộc khác đang buộc Phiên bản 4.1.6. –

+0

Tôi chạy vào cùng một điều. Tôi đã cập nhật ứng dụng đám mây mùa xuân của mình để sử dụng phiên bản khởi động mùa xuân 1.3.0.M5 và dường như có rất nhiều phụ thuộc vào khung công tác mùa xuân 4.1.6. Trong cây phụ thuộc, tôi chú ý một số là 4.2.1 nhưng phần lớn vẫn là 4.1.6. Tôi không có một 4.1.6 spring.version rõ ràng bất cứ nơi nào – EvilJinious1

Trả lời

17

xuân Boot quản lý một loạt các phụ thuộc cho bạn và allows you to add them without specifying the version. Spring Boot rõ ràng là dựa trên Spring Framework và sử dụng mới nhất và lớn nhất, do đó bạn nên tránh mọi chi phí để sửa phiên bản khung công tác mùa xuân để sử dụng chính mình.

Nếu bạn đã nâng cấp lên phiên bản mới hơn (để bao gồm sửa lỗi hoặc điều gì đó), hãy đảm bảo xóa ghi đè trước khi bạn nâng cấp Khởi động mùa xuân vì phiên bản mới yêu cầu có thể không tương thích với ghi đè của bạn.

Nếu bạn đang sử dụng các dự án khác cũng cung cấp quản lý phụ thuộc vào Spring Framework (chẳng hạn như Spring Cloud) đảm bảo rằng việc quản lý phụ thuộc của Spring Boot được ưu tiên. Với Maven, hãy nhớ thêm spring-boot-dependencies BOM là the first entry in the <dependenciesManagement> section.

+1

Tôi cũng sẽ chọn tham gia câu trả lời này. Tệp pom.xml của tôi có hai khai báo phụ thuộc khác nhau để kiểm tra spring-test-mvc và spring-test, điều này dường như đã khiến cho lớp tải lên bị rối tung lên. Loại bỏ spring-test-mvc giải quyết vấn đề cho tôi. – Rabiees

+0

Lần cuối cùng tôi gặp sự cố này, bản cập nhật từ phiên bản Spring-Boot '1.3.7' đến '1.3.8' đã khắc phục sự cố. –

4

Gây ra bởi: java.lang.NoClassDefFoundError: org/springframework/context/event/GenericApplicationListener Từ lỗi trên, ứng dụng không thể tìm thấy lớp được xác định từ phụ thuộc jar. GenericApplicationListener được thêm vào từ phiên bản mùa xuân 4.2.

Nâng cấp phiên bản spring lên 4.2 và kiểm tra lại.

6

Tôi đã gặp vấn đề tương tự vì POM của tôi có phần thuộc tính với thẻ <spring.version> được sao chép từ một dự án khác.

Xóa bất kỳ thẻ <abc.version> nào trong phần thuộc tính của bạn có thể xung đột với thư viện Spring Boot.

+0

Điều đó hữu ích cho tôi. Tôi đã xóa và tất cả đều hoạt động tốt – petre

+0

chỉ gặp lỗi này. Cảm ơn ! – MaxouMask

Các vấn đề liên quan