복붙노트

[SPRING] BeanDefinitionStoreException 후보 구성 요소 클래스를 읽지 못했습니다.

SPRING

BeanDefinitionStoreException 후보 구성 요소 클래스를 읽지 못했습니다.

누군가이 문제를 해결하는 방법을 말해 줄 수 있습니까?

문제를 pom.xml 파일로 좁혔습니다. 내 프로젝트가 작동하지만 다음 종속성을 추가 할 때 오류가 발생합니다.

    <dependency>
        <groupId>org.springframework.data</groupId>
        <artifactId>spring-data-jpa</artifactId>
        <version>1.3.2.RELEASE</version>
    </dependency>

오류 스택은 다음과 같습니다.

ERROR DispatcherServlet - Context initialization failed
org.springframework.beans.factory.BeanDefinitionStoreException: Failed to read candidate component class: file [C:\workspace-sts\.metadata\.plugins\org.eclipse.wst.server.core\tmp1\wtpwebapps\Webtest1\WEB-INF\classes\com\springweb\controller\SetHomePageController.class]; nested exception is java.lang.IncompatibleClassChangeError: class org.springframework.core.type.classreading.ClassMetadataReadingVisitor has interface org.springframework.asm.ClassVisitor as super class
    at org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider.findCandidateComponents(ClassPathScanningCandidateComponentProvider.java:290) ~[spring-context-3.2.3.RELEASE.jar:3.2.3.RELEASE]
    at org.springframework.context.annotation.ClassPathBeanDefinitionScanner.doScan(ClassPathBeanDefinitionScanner.java:242) ~[spring-context-3.2.3.RELEASE.jar:3.2.3.RELEASE]
    at org.springframework.context.annotation.ComponentScanBeanDefinitionParser.parse(ComponentScanBeanDefinitionParser.java:84) ~[spring-context-3.2.3.RELEASE.jar:3.2.3.RELEASE]
    at org.springframework.beans.factory.xml.NamespaceHandlerSupport.parse(NamespaceHandlerSupport.java:73) ~[spring-beans-3.2.3.RELEASE.jar:3.2.3.RELEASE]
    at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1438) ~[spring-beans-3.2.3.RELEASE.jar:3.2.3.RELEASE]
    at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1428) ~[spring-beans-3.2.3.RELEASE.jar:3.2.3.RELEASE]
    at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.parseBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:185) ~[spring-beans-3.2.3.RELEASE.jar:3.2.3.RELEASE]
    at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.doRegisterBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:139) ~[spring-beans-3.2.3.RELEASE.jar:3.2.3.RELEASE]
    at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.registerBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:108) ~[spring-beans-3.2.3.RELEASE.jar:3.2.3.RELEASE]
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.registerBeanDefinitions(XmlBeanDefinitionReader.java:493) ~[spring-beans-3.2.3.RELEASE.jar:3.2.3.RELEASE]
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:390) ~[spring-beans-3.2.3.RELEASE.jar:3.2.3.RELEASE]
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:334) ~[spring-beans-3.2.3.RELEASE.jar:3.2.3.RELEASE]
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:302) ~[spring-beans-3.2.3.RELEASE.jar:3.2.3.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:174) ~[spring-beans-3.2.3.RELEASE.jar:3.2.3.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:209) ~[spring-beans-3.2.3.RELEASE.jar:3.2.3.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:180) ~[spring-beans-3.2.3.RELEASE.jar:3.2.3.RELEASE]
    at org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:125) ~[spring-web-3.2.3.RELEASE.jar:3.2.3.RELEASE]
    at org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:94) ~[spring-web-3.2.3.RELEASE.jar:3.2.3.RELEASE]
    at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:130) ~[spring-context-3.2.3.RELEASE.jar:3.2.3.RELEASE]
    at org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:537) ~[spring-context-3.2.3.RELEASE.jar:3.2.3.RELEASE]
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:451) ~[spring-context-3.2.3.RELEASE.jar:3.2.3.RELEASE]
    at org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java:651) ~[spring-webmvc-3.2.3.RELEASE.jar:3.2.3.RELEASE]
    at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:599) ~[spring-webmvc-3.2.3.RELEASE.jar:3.2.3.RELEASE]
    at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:665) ~[spring-webmvc-3.2.3.RELEASE.jar:3.2.3.RELEASE]
    at org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:518) ~[spring-webmvc-3.2.3.RELEASE.jar:3.2.3.RELEASE]
    at org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:459) ~[spring-webmvc-3.2.3.RELEASE.jar:3.2.3.RELEASE]
    at org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:136) [spring-webmvc-3.2.3.RELEASE.jar:3.2.3.RELEASE]
    at javax.servlet.GenericServlet.init(GenericServlet.java:160) [servlet-api.jar:3.0.FR]
    at org.apache.catalina.core.Standar

나는 의존성에 무엇이 잘못된지 이해할 수 없다. 나중에 JpaRepository를 사용하는 DAO를 추가 할 때 spring-data jpa 의존성이 필요하다.

미리 감사드립니다.

해결법

  1. ==============================

    1.클래스 경로에 충돌하는 스프링 의존성이 가장 높습니다. 그것은 아마 오래된 spring-asm JAR 일 것입니다.

    클래스 경로에 충돌하는 스프링 의존성이 가장 높습니다. 그것은 아마 오래된 spring-asm JAR 일 것입니다.

    mvn 의존성을 실행하십시오 : tree -Dincludes = : spring * :: 그리고 충돌을 검사하십시오. 이러한 문제를 피하는 가장 좋은 방법은 다음과 같이 프로젝트 종속성 관리 섹션의 spring-framework-bom에 종속성을 두는 것입니다

            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-framework-bom</artifactId>
                <version>4.0.3.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
    

    이 버전이 지원됩니다.

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

    2.또 다른 이유는 Java 8에서 Spring 3를 사용하기 때문입니다. Java 8에는 Spring 4가 필요합니다.

    또 다른 이유는 Java 8에서 Spring 3를 사용하기 때문입니다. Java 8에는 Spring 4가 필요합니다.

    (이 질문과 관련이 없지만 오류 메시지를 검색하는 사용자의 경우)

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

    3.나는 봄 3.2.3.RELEASE를 사용하고있다. 내가 javen.version 1.6을 maven 컴파일러 플러그인에서 1.6으로 바꿨을 때 작동을 시작했다.

    나는 봄 3.2.3.RELEASE를 사용하고있다. 내가 javen.version 1.6을 maven 컴파일러 플러그인에서 1.6으로 바꿨을 때 작동을 시작했다.

    <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>2.3.2</version>
            <configuration>
                <source>${jdk.version}</source>
                <target>${jdk.version}</target>
            </configuration>
    </plugin>
    
  4. ==============================

    4.필자의 경우에는 최신 스프링 코어와 충돌하는 스프링 의존성 의존성을 가져온 의존성이 있었다. 따라서 Dependency Hierarchy에서는 "asm"을 검색하고이를 가지고있는 모든 의존성으로부터 spring asm을 제외합니다.

    필자의 경우에는 최신 스프링 코어와 충돌하는 스프링 의존성 의존성을 가져온 의존성이 있었다. 따라서 Dependency Hierarchy에서는 "asm"을 검색하고이를 가지고있는 모든 의존성으로부터 spring asm을 제외합니다.

    내 경우: 1)

    <dependency>
        <groupId>org.restlet.jee</groupId>
        <artifactId>org.restlet.ext.fileupload</artifactId>
        <version>2.3.1</version>
            <exclusions>
                    <exclusion>
                      <groupId>org.springframework</groupId>
                      <artifactId>spring-asm</artifactId>
                   </exclusion>
            </exclusions>
    </dependency>
    

    2)

    <dependency>
        <groupId>org.restlet.jee</groupId>
        <artifactId>org.restlet.ext.spring</artifactId>
        <version>2.1.2</version>
             <exclusions>
                      <exclusion>
                             <groupId>org.springframework</groupId>
                             <artifactId>spring-asm</artifactId>
                      </exclusion>
             </exclusions>
    </dependency>
    
  5. ==============================

    5.비슷한 오류로 인해 클래스 파일이 손상되었습니다 - CI 빌드에 jar 파일에 0 바이트 클래스 파일이 있습니다 (0이 아닌 내부 클래스 파일이 존재 함에도 불구하고 다른 파일이 존재 함에도 불구하고) - 100 개 클래스 중 하나가 손상되었습니다. . 디스크 공간 문제 일 수도 있지만 (클래스가 종속 프로젝트 병에 있었기 때문에 Gradle이 Spring Boot 프로젝트의 fat-jar로 빌드 한 이후로) 시간이 걸렸습니다.

    비슷한 오류로 인해 클래스 파일이 손상되었습니다 - CI 빌드에 jar 파일에 0 바이트 클래스 파일이 있습니다 (0이 아닌 내부 클래스 파일이 존재 함에도 불구하고 다른 파일이 존재 함에도 불구하고) - 100 개 클래스 중 하나가 손상되었습니다. . 디스크 공간 문제 일 수도 있지만 (클래스가 종속 프로젝트 병에 있었기 때문에 Gradle이 Spring Boot 프로젝트의 fat-jar로 빌드 한 이후로) 시간이 걸렸습니다.

  6. from https://stackoverflow.com/questions/22771826/beandefinitionstoreexception-failed-to-read-candidate-component-class by cc-by-sa and MIT license