【问题标题】:org.springframework.beans.factory.CannotLoadBeanClassException: Cannot find classorg.springframework.beans.factory.CannotLoadBeanClassException:找不到类
【发布时间】:2010-02-12 04:38:49
【问题描述】:

我用我的 tomcat 6.0 安装目录中的 servle-api.com 替换了 j2ee.jar: 这会产生以下错误。我目前正试图找出原因。可能是什么问题。

我在配置文件中定义了一个 bean:Sempedia-service.xml 如下

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
    <bean id="sempediaSearchService"
        class="com.service.SempediaSearchManager" />


</beans>

我的 web.xml 指定以下 bean:

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/Sempedia-service.xml,/WEB-INF/Sempedia-persistence.xml</param-value>
</context-param>

<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

堆栈跟踪

SEVERE: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener
org.springframework.beans.factory.CannotLoadBeanClassException: Cannot find class [com.service.SempediaSearchManager] for bean with name 'sempediaSearchService' defined in ServletContext resource [/WEB-INF/Sempedia-service.xml]; nested exception is java.lang.ClassNotFoundException: com.service.SempediaSearchManager
    at org.springframework.beans.factory.support.AbstractBeanFactory.resolveBeanClass(AbstractBeanFactory.java:1141)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.predictBeanType(AbstractAutowireCapableBeanFactory.java:524)
    at org.springframework.beans.factory.support.AbstractBeanFactory.isFactoryBean(AbstractBeanFactory.java:1177)
    at org.springframework.beans.factory.support.AbstractBeanFactory.isFactoryBean(AbstractBeanFactory.java:758)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:422)
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:728)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:380)
    at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:255)
    at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:199)
    at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:45)
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3934)
    at org.apache.catalina.core.StandardContext.start(StandardContext.java:4429)
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
    at org.apache.catalina.core.StandardHost.start(StandardHost.java:722)
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
    at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
    at org.apache.catalina.core.StandardService.start(StandardService.java:516)
    at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
    at org.apache.catalina.startup.Catalina.start(Catalina.java:583)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288)
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)
Caused by: java.lang.ClassNotFoundException: com.service.SempediaSearchManager
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1387)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1233)
    at org.springframework.util.ClassUtils.forName(ClassUtils.java:211)
    at org.springframework.beans.factory.support.AbstractBeanDefinition.resolveBeanClass(AbstractBeanDefinition.java:385)
    at org.springframework.beans.factory.support.AbstractBeanFactory.resolveBeanClass(AbstractBeanFactory.java:1138)
    ... 24 more

【问题讨论】:

    标签: java spring-mvc


    【解决方案1】:

    我得到了同样的错误,原因是目录:

    U:.....WEB\WebRoot\WEB-INF\classes\com\yourcompany\cc\dao

    已损坏(目录或文件无法读取或损坏).. 解决了

    • 将目录 WEB-INF\classes 重命名为 WEB-INF\classes_old
    • Eclipse 的 Project 菜单--> Clean(重新创建目录)
    • 重新部署 --> 重启服务器。

    【讨论】:

    • 完美!!太棒了。
    【解决方案2】:

    我也遇到过类似的问题

    所以

    我只是这样做

    1.更新 Maven 项目

    2.安装maven。

    【讨论】:

      【解决方案3】:

      问题是你的 webapp 的类路径中没有名为 com.service.SempediaSearchManager 的类。最可能的根本原因是:

      • /WEB-INF/Sempedia-service.xml 中的全限定类名不正确;即类名是别的东西,

      • 该类不在您的 web 应用程序的 /WEB-INF/classes 目录树中或 /WEB-INF/lib 目录中的 JAR 文件中。

      编辑:我能想到的唯一另一件事是ClassDefNotFoundException 实际上可能是早期类加载/静态初始化问题的结果。检查您的日志文件中的 first 堆栈跟踪,并查看嵌套异常,即“由”链。 [如果一个类加载失败一次,而您或 Spring 由于某种原因再次调用 Class.forName(),那么 Java 实际上不会尝试第二次加载。相反,您将得到一个 ClassDefNotFoundException 堆栈跟踪,它不能解释原始失败的真正原因。]

      如果您仍然感到困惑,您应该将 Eclipse 排除在外。以您最终将要部署的形式创建 WAR 文件,然后从命令行:

      1. 手动关闭 Tomcat

      2. 清理您的 Tomcat webapp 目录,

      3. 将WAR文件复制到webapp目录下,

      4. 启动 Tomcat。

      如果这不能直接解决问题,请查看 Tomcat 上部署的 webapp 目录,以验证“缺失”类是否在正确的位置。

      【讨论】:

      • 我已经检查了您列出的要点,但问题尚未解决。我仍然注意到 Eclipse 对我的“项目文件夹”和“Java 资源文件夹”有一个红色的 X 勾号。通常这可以通过构建路径 - >“配置构建路径”并添加罐子来解决,但在“Java构建路径”窗口的库选项卡中似乎没有任何相应的红色勾号。
      • 当你说你已经检查了这两点时,你是否真的查看了 $CATALINA_HOME/webapps//WEB-INF/lib 看到 JAR 文件真的已经部署了吗?您是否在 JAR 文件上运行 tar tvf 以检查该类是否真的存在?
      【解决方案4】:

      检查你的依赖关系。

      <?xml version="1.0" encoding="UTF-8"?>
      <project xmlns="http://maven.apache.org/POM/4.0.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <groupId>SchoolApp</groupId>
        <artifactId>SchoolApp</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <packaging>war</packaging>
      
        <properties>
          <hibernate.version>4.2.0.Final</hibernate.version>
          <mysql.connector.version>5.1.21</mysql.connector.version>
          <spring.version>3.2.2.RELEASE</spring.version>
        </properties>
      
        <dependencies>
          <!-- DB related dependencies -->
          <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>${hibernate.version}</version>
          </dependency>
          <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-entitymanager</artifactId>
            <version>${hibernate.version}</version>
          </dependency>
          <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>${mysql.connector.version}</version>
          </dependency>
          <dependency>
            <groupId>commons-dbcp</groupId>
            <artifactId>commons-dbcp</artifactId>
            <version>1.4</version>
          </dependency>
          <dependency>
            <groupId>javassist</groupId>
            <artifactId>javassist</artifactId>
            <version>3.12.1.GA</version>
          </dependency>
          <!-- SPRING -->
          <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>${spring.version}</version>
          </dependency>
          <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>${spring.version}</version>
          </dependency>
          <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${spring.version}</version>
          </dependency>
          <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-tx</artifactId>
            <version>${spring.version}</version>
          </dependency>
          <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>${spring.version}</version>
          </dependency>
          <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-orm</artifactId>
            <version>${spring.version}</version>
          </dependency>
          <!-- Spring Security  -->
          <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-core</artifactId>
            <version>3.1.3.RELEASE</version>
          </dependency>
          <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-web</artifactId>
            <version>3.1.3.RELEASE</version>
          </dependency>
          <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-config</artifactId>
            <version>3.1.3.RELEASE</version>
          </dependency>
          <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-taglibs</artifactId>
            <version>3.1.3.RELEASE</version>
          </dependency>
          <!-- CGLIB is required to process @Configuration classes -->
          <dependency>
            <groupId>cglib</groupId>
            <artifactId>cglib</artifactId>
            <version>2.2.2</version>
          </dependency>
          <!-- Servlet API and JSTL -->
          <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.0.1</version>
            <scope>provided</scope>
          </dependency>
          <dependency>
            <groupId>jstl</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
          </dependency>
          <!-- Test -->
          <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.7</version>
            <scope>test</scope>
          </dependency>
          <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>${spring.version}</version>
            <scope>test</scope>
          </dependency>
          <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test-mvc</artifactId>
            <version>1.0.0.M1</version>
            <scope>test</scope>
          </dependency>
        </dependencies>
      
        <repositories>
          <repository>
            <id>spring-maven-milestone</id>
            <name>Spring Maven Milestone Repository</name>
            <url>http://maven.springframework.org/milestone</url>
          </repository>
        </repositories>
      
        <build>
          <finalName>spr-mvc-hib</finalName>
          <plugins>
            <plugin>
              <artifactId>maven-compiler-plugin</artifactId>
              <version>2.3.2</version>
              <configuration>
                <source>1.7</source>
                <target>1.7</target>
              </configuration>
            </plugin>
          </plugins>
        </build>
      </project>
      

      【讨论】:

        【解决方案5】:

        我也有同样的问题。我根据 Stephen 的 建议检查了我的 /WEB-INF/classes:

        该类不在您的 webapp 的 /WEB-INF/classes 目录树或 /WEB-INF/lib 目录中的 JAR 文件中。

        我发现我有一个过时的 jar 文件。将其替换为最新的 jar 文件即可解决问题。

        【讨论】:

          【解决方案6】:

          我最近在尝试构建时遇到了这个问题,但笔记本电脑的电池突然没电了。我刚刚从 eclipse 中删除了所有服务器,然后将其恢复。之后,我重新构建了 war 文件并且它工作了。

          【讨论】:

            【解决方案7】:

            这里留给未来的访客:

            在我的例子中,/WEB-INF/classes 目录丢失了。如果您使用的是 Eclipse,请确保 .settings/org.eclipse.wst.common.component 正确(项目设置中的部署程序集)。

            在我的情况下它丢失了

                <wb-resource deploy-path="/WEB-INF/classes" source-path="/src/main/resources"/>
                <wb-resource deploy-path="/WEB-INF/classes" source-path="/src/test/resources"/>
            

            此文件也是 Anuj 提到的常见错误来源(缺少其他项目的依赖项)。

            否则,希望其他答案(或“问题”标签)对您有所帮助。

            【讨论】:

              【解决方案8】:

              我不知道它是否与您的问题有关,我遇到了类似的问题,我已经解决了

              1) 在eclipse中右键服务器并清理

              如果还是不行

              2)导出项目并删除项目创建同名项目并导入项目并将项目添加到服务器并运行。

              【讨论】:

                猜你喜欢
                • 2021-11-05
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2015-02-01
                • 2014-12-19
                • 2014-07-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多