【问题标题】:BeanDefinitionStoreException Failed to read candidate component classBeanDefinitionStoreException 读取候选组件类失败
【发布时间】:2014-05-11 09:32:00
【问题描述】:

谁能告诉我如何解决这个问题?

我已将问题范围缩小到 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 依赖。

提前致谢。

【问题讨论】:

    标签: spring web


    【解决方案1】:

    另一个原因是 Spring 3 与 Java 8 一起使用。Java 8 需要 Spring 4。

    (不是针对这个问题,而是针对那些正在谷歌搜索错误消息的人)

    【讨论】:

    • 更多 Google 关键字.....我在尝试使用 JDK8、Spring 3 和 lambda 表达式时的具体错误是“无法读取候选组件类文件”,然后是 ArrayIndexOutOfBoundsException
    • @skylarsutton 我认为谷歌不太关注 cmets。最好的做法可能是创建一个带有确切错误消息并接受正确答案的 SO 问题。
    • 在我的情况下,我使用的是 Spring 3 版本 3.0.5.Release 和 JDK 1.8 版本 1.8.0_131,它运行良好,当我迁移到 Spring 3 版本 3.2.1.RELEASE 时,我的问题就出现了。
    【解决方案2】:

    您的类路径上很可能存在冲突的 Spring 依赖项。它可能是一个旧的spring-asm JAR。

    运行mvn dependency:tree -Dincludes=:spring*:: 并检查是否存在冲突。避免这些问题的最佳方法是在项目的 dependencyManagement 部分中添加对 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>
    

    支持These versions

    【讨论】:

    • 我不确定我是否理解。我必须将该依赖项添加到 pom.xml 吗?我做了,但没有用...如何从我的项目中删除 spring-asm?
    • 这在&lt;dependencyManagement&gt; 部分,而不是&lt;dependencies&gt; 部分。如果您已确定依赖项,请向其添加 &lt;exclusions&gt; 部分。在谷歌搜索排除后,出现了这个答案,非常相似:stackoverflow.com/questions/16801639/…
    • 谢谢!,使用排除解决了问题。我知道这有点无关,但我希望有人能提供帮助。使用休息,我从数据库中获取数据。当我在前端使用带有以下路径“/api/list”的 $http.get 时,它不起作用。如果我使用“/Webtest3/api/list”,那么它可以工作(website3 是项目的名称,我的主页加载这个 url localhost:8080/Webtest3/)。如何配置它以便它接受 /api/list而不是Website3/api/list?谢谢
    • 你需要把它变成一个单独的问题,并详细说明你正在使用的技术,这样合适的人才能看到它。如果您已解决此 Maven 问题并且此答案对您有所帮助,请单击复选标记将其标记为“已接受”。这有助于将注意力集中在仍然没有答案的其他 SO 问题上。
    • @user3058470 在没有-Dincludes 的情况下运行mvn dependency:tree 以查看完整输出。 -Dincludes 标志只是一个过滤器,可帮助您在所有输出中找到您感兴趣的依赖项。
    【解决方案3】:

    我正在使用 spring 3.2.3.RELEASE。当我在 maven 编译器插件中将 jdk.version 1.8 更改为 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】:

    如何解决这个问题?

    解决方案 1:将 spring 版本更改为 >= 3.2.16。

    解决方案2:如果你的spring versin低于3.2.16,不要使用Annotation如:@Service@Controller等。使用 bean.xml 定义一个 bean,bean.xml 不包含“&lt;context:component-scan base-package=""/&gt;”。如果必须使用&lt;context:component-scan base-package=""/&gt;,请输入其他bean.xml。

    【讨论】:

      【解决方案5】:

      如果有人仍然面临这个错误并且正在参考 spring.io 的入门指南,那么不使用默认包并将您的类文件放在新包下对我来说是诀窍。

      【讨论】:

      • 这对我有帮助。我有基本包名称为com.example.test1.service1 的模块和com.example.test2.service2 的另一个模块以及使用上述模块中的service1service2 的第三个模块,第三个模块的主类默认情况下位于@ 987654325@ 导致错误,所以我把它放在com.example 下,这对我来说就像一个魅力!
      【解决方案6】:

      在我的例子中,我的依赖项引入了与最新 Spring 核心冲突的 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>
      

      【讨论】:

        【解决方案7】:

        由于类文件损坏,我遇到了类似的错误——不知何故,CI 构建的 jar 中有一个零字节的类文件(尽管存在非零内部类文件,其他文件还可以)——一个损坏的文件约 100 节课。这可能是磁盘空间问题,但花了一段时间才意识到(因为该类位于依赖项目 jar 中,由 Gradle 构建到 Spring Boot 项目的 fat-jar 中)。

        【讨论】:

          【解决方案8】:

          当我尝试更改构建路径中的 jar 序列时 &lt;classpathentry kind="lib" path="/CoreTrainSim-Software-COTS/spring_jars/spring-core-5.1.7.RELEASE.jar"/&gt;

          成功了

          【讨论】:

            猜你喜欢
            • 2021-12-29
            • 1970-01-01
            • 1970-01-01
            • 2020-11-21
            • 2014-07-21
            • 2016-05-06
            • 2012-01-30
            • 1970-01-01
            相关资源
            最近更新 更多