2010-02-12 83 views
9

我將j2ee.jar替換爲我的tomcat 6.0安裝目錄下的servle-api.com: 並且這會產生下面的錯誤。我目前正試圖找出原因。問題可能是什麼。org.springframework.beans.factory.CannotLoadBeanClassException:找不到類

我有一個在配置文件中定義的豆: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指定以下豆:

<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 

回答

13

問題是您的webapp的類路徑中沒有稱爲com.service.SempediaSearchManager的類。最可能的根本原因是:

  • 全限定的類名在/WEB-INF/Sempedia-service.xml;即類別名稱是別的,

  • 該類不在您的webapp的/WEB-INF/classes目錄樹或/WEB-INF/lib目錄中的JAR文件中。

編輯:我能想到的唯一的另一件事是,ClassDefNotFoundException實際上可能是較早的類加載/靜態初始化問題的結果。檢查你的日誌文件中的第一個堆棧跟蹤,並查看嵌套異常,即「由...引起」鏈。 [如果類加載一次失敗,並且由於某種原因您或Spring再次調用Class.forName(),那麼Java實際上不會再嘗試加載第二次。相反,你會得到一個ClassDefNotFoundException堆棧跟蹤,並不能解釋原始故障的真正原因。]

如果仍然難倒,應該將Eclipse從圖片中取出。創建您最終將部署的形式WAR文件,然後在命令行:

  1. 手動關閉Tomcat的

  2. 清理你的Tomcat的webapps目錄下,

  3. 副本將WAR文件放入webapp目錄,

  4. 啓動Tomcat。

如果不能直接解決問題,看看在Tomcat上部署Web應用程序目錄,以驗證「失蹤」類是在正確的地方。

+0

我檢查了您列出的要點,但問題尚未解決。我仍然注意到eclipse對我的「項目文件夾」和「Java資源文件夾」有一個紅色的X勾號。 通常這將通過 構建路徑 - >「配置構建路徑」並添加jar但在「Java Build Path」窗口的庫選項卡中似乎沒有任何相應的紅色勾號來解決。 – Terman 2010-02-12 05:29:17

+0

當你說你已經檢查了這兩點時,你是否真的在$ CATALINA_HOME/webapps//WEB-INF/lib中看過,看看JAR文件是否真的被部署了?你是否在JAR文件上運行'tar tvf'來檢查類是否真的在那裏? – 2010-02-12 05:44:32

+0

(Ooops ...'jar tvf' ...) – 2013-03-15 13:09:38

0

我有同樣的問題。我檢查了我的/ WEB-INF/classes中基於斯蒂芬推薦:

類是不是在你的web應用程序的/ WEB-INF/classes目錄樹或/ WEB-INF/lib目錄下的JAR文件。

我發現我有一個過時的jar文件。用最新的jar文件替換它解決了這個問題。

1

我有同樣的問題。當我檢查構建/類文件夾沒有生成類。按照說明here 問題已解決,向Maven Dependency添加到「Deployment Web Assembly」後。

1

檢查您的依賴關係。

<?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> 
0

我最近遇到了這個問題,當我試圖建立和突然筆記本電腦電池耗盡電量。我只是從eclipse中刪除所有的服務器,然後恢復它。做完這些之後,我重新構建了戰爭文件,並且它工作正常。

0

就要離開這個供將來遊客:

在我的情況下/ 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(缺少其他項目的依賴)提及。

否則,希望其他答案(或「問題」選項卡)將幫助你。

2

我得到了同樣的錯誤,原因是目錄:

U:..... WEB \的WebRoot \ WEB-INF \類\ COM \ yourcompany \ CC \ DAO

已損壞(目錄或文件不可讀或損壞).. 與

  • 重命名的目錄WEB-INF \類作爲WEB-INF \解決classes_old
  • Eclipse的項目菜單 - >清理(重新創建目錄)
  • 重新部署 - >重新啓動服務器。
+0

Perfecto !!高超。 – 2016-12-26 06:54:43