복붙노트

[SPRING] Spring Boot 1.3.0M1에서 1.3.0M2로 전환 할 때 "NoClassDefFoundError : GenericApplicationListener"

SPRING

Spring Boot 1.3.0M1에서 1.3.0M2로 전환 할 때 "NoClassDefFoundError : GenericApplicationListener"

내 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

언급 된 클래스는 스프링 컨텍스트 버전 4.2.0에 추가되었지만 종속성 트리를 보면 스프링 부트 1.3.0M2가 여전히 스프링 컨텍스트 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. ==============================

    1.스프링 부트 (Spring Boot)는 많은 의존성을 관리하고 버전을 지정하지 않고 추가 할 수있게 해줍니다. 스프링 부트는 분명히 스프링 프레임 워크를 기반으로하며 가장 최신의 것을 사용하기 때문에 스프링 프레임 워크 버전을 직접 수정하지 않아도된다.

    스프링 부트 (Spring Boot)는 많은 의존성을 관리하고 버전을 지정하지 않고 추가 할 수있게 해줍니다. 스프링 부트는 분명히 스프링 프레임 워크를 기반으로하며 가장 최신의 것을 사용하기 때문에 스프링 프레임 워크 버전을 직접 수정하지 않아도된다.

    최신 버전으로 업그레이드 한 경우 (버그 수정 등을 포함) 스프링 부트를 업그레이드하기 전에 오버라이드를 제거해야합니다. 새 버전이 필요한 경우 오버라이드와 호환되지 않을 수 있습니다.

    Spring Framework와 같은 의존성 관리를 제공하는 다른 프로젝트 (예 : Spring Cloud)를 사용하고 있다면 Spring Boot의 종속성 관리가 우선시되어야한다. Maven을 사용하면 섹션의 첫 번째 항목으로 spring-boot-dependencies BOM을 추가해야합니다.

  2. ==============================

    2.내 POM에 다른 프로젝트에서 복사 한 태그가있는 속성 섹션이 있었기 때문에 동일한 문제가 발생했습니다.

    내 POM에 다른 프로젝트에서 복사 한 태그가있는 속성 섹션이 있었기 때문에 동일한 문제가 발생했습니다.

    Spring 부트 라이브러리와 충돌 할 수있는 속성 섹션에서 태그를 제거하십시오.

  3. ==============================

    3.

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

    위의 오류에서 응용 프로그램은 jar 종속성에서 정의 된 클래스를 찾을 수 없습니다. GenericApplicationListener는 Spring 4.2 버전에서 추가되었습니다.

    Spring 버전을 4.2로 업그레이드하고 다시 확인하십시오.

  4. from https://stackoverflow.com/questions/31489947/noclassdeffounderror-genericapplicationlistener-when-switching-from-spring-bo by cc-by-sa and MIT license