2014-02-27 37 views
1

服务器启动期间Tomcat,Spring和Eclipse上的Wicket带有ClassNotFoundException。服务器启动期间Tomcat,Spring,Maven和Eclipse上的Wicket的ClassNotFoundException

在Eclipse中,当我尝试加载服务器时遇到了一些导致404页面的错误。

这里的堆栈跟踪:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'plop0' defined in ServletContext resource [/WEB-INF/spring-config/dependenciesInjectionContext.xml]: Cannot resolve reference to bean 'plop1' while setting bean property 'plop1'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'plop1': Injection of persistence fields failed; nested exception is org.springframework.beans.factory.CannotLoadBeanClassException: Cannot find class [com.plop2.plop3.presentation.WicketApplication] for bean with name 'wicketApplication' defined in ServletContext resource [/WEB-INF/spring-config/wicketContext.xml]; nested exception is java.lang.ClassNotFoundException: com.plop2.plop3.presentation.WicketApplication 
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:275) 
    ... 
    at java.lang.Thread.run(Unknown Source) 
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'plop1': Injection of persistence fields failed; nested exception is org.springframework.beans.factory.CannotLoadBeanClassException: Cannot find class [com.plop2.plop3.presentation.WicketApplication] for bean with name 'wicketApplication' defined in ServletContext resource [/WEB-INF/spring-config/wicketContext.xml]; nested exception is java.lang.ClassNotFoundException: com.plop2.plop3.presentation.WicketApplication 
    at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor.postProcessAfterInstantiation(PersistenceAnnotationBeanPostProcessor.java:311) 
    ... 
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:269) 
    ... 26 more 
Caused by: org.springframework.beans.factory.CannotLoadBeanClassException: Cannot find class [com.plop2.plop3.presentation.WicketApplication] for bean with name 'wicketApplication' defined in ServletContext resource [/WEB-INF/spring-config/wicketContext.xml]; nested exception is java.lang.ClassNotFoundException: com.plop2.plop3.presentation.WicketApplication 
    at org.springframework.beans.factory.support.AbstractBeanFactory.resolveBeanClass(AbstractBeanFactory.java:1141) 
    ... 
    at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor.postProcessAfterInstantiation(PersistenceAnnotationBeanPostProcessor.java:308) 
    ... 37 more 
Caused by: java.lang.ClassNotFoundException: com.plop2.plop3.presentation.WicketApplication 
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1676) 
    ... 
    at org.springframework.beans.factory.support.AbstractBeanFactory.resolveBeanClass(AbstractBeanFactory.java:1138) 
    ... 49 more 

plop3管理员提供商检票的pom.xml中:

<parent> 
    <groupId>com.plop2.plop3</groupId> 
    <artifactId>plop3</artifactId> 
    <version>1.0.0</version> 
    <relativePath>../pom.xml</relativePath> 
</parent> 

<artifactId>plop3-admin-provider-wicket</artifactId> 
<packaging>jar</packaging> 
<name>${project.artifactId}(${project.packaging})</name> 

<dependencies> 
    ... 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-context</artifactId> 
    </dependency> 
    ... 
    <dependency> 
     <groupId>org.apache.wicket</groupId> 
     <artifactId>wicket</artifactId> 
    </dependency>  
    <dependency> 
     <groupId>org.apache.wicket</groupId> 
     <artifactId>wicket-extensions</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.wicket</groupId> 
     <artifactId>wicket-datetime</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.wicket</groupId> 
     <artifactId>wicket-jmx</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.wicket</groupId> 
     <artifactId>wicket-spring</artifactId> 
    </dependency> 
</dependencies> 
<build> 
    <resources>   
     <resource> 
      <filtering>true</filtering> 
      <directory>src/main/java</directory> 
      <includes> 
       <include>**/*.html</include> 
       <include>**/*.properties</include> 
      </includes> 
     </resource> 
    </resources> 
    <testResources> 
     <testResource> 
      <filtering>true</filtering> 
      <directory>src/test/resources</directory> 
     </testResource> 
    </testResources> 
</build> 

plop3管理员-战争的pom.xml:

<parent> 
    <groupId>com.plop2.plop3</groupId> 
    <artifactId>plop3</artifactId> 
    <version>1.0.0</version> 
    <relativePath>../pom.xml</relativePath> 
</parent> 
<modelVersion>4.0.0</modelVersion> 
<artifactId>plop3-admin-war</artifactId> 
<packaging>war</packaging> 
<name>${project.artifactId}(${project.packaging})</name> 
<dependencies>  
    <dependency> 
     <groupId>${project.groupId}</groupId> 
     <artifactId>plop3-admin-provider-wicket</artifactId> 
    </dependency>  
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-aop</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-core</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-web</artifactId> 
    </dependency> 
    ... 
    <dependency> 
     <groupId>org.apache.wicket</groupId> 
     <artifactId>wicket</artifactId> 
    </dependency> 
    ... 
</dependencies> 
<build> 
    <resources> 
     <resource> 
      <filtering>true</filtering> 
      <directory>src/main/resources</directory> 
     </resource> 
    </resources> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-war-plugin</artifactId> 
      <configuration> 
       <webResources> 
        <resource> 
         <directory>src/main/webapp</directory> 
         <filtering>true</filtering> 
        </resource> 
       </webResources> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 

plop3-admin-war的web.xml:

<!-- Spring param --> 
<context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value>/WEB-INF/spring-config/applicationContext.xml</param-value> 
</context-param> 
<filter> 
    <filter-name>Spring character encoding filter</filter-name> 
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> 
    <init-param> 
     <param-name>encoding</param-name> 
     <param-value>UTF-8</param-value> 
    </init-param> 
    <init-param> 
     <param-name>forceEncoding</param-name> 
     <param-value>true</param-value> 
    </init-param> 
</filter> 
<filter-mapping> 
    <filter-name>Spring character encoding filter</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 
<filter> 
    <filter-name>gassi.filter</filter-name> 
    <filter-class>com.plop2.plop3.gassi.GassiFilter</filter-class> 
</filter> 
<filter-mapping> 
    <filter-name>gassi.filter</filter-name> 
    <url-pattern>/app/*</url-pattern> 
</filter-mapping> 
<filter> 
    <filter-name>wicket.filter</filter-name> 
    <filter-class>org.apache.wicket.protocol.http.WicketFilter</filter-class> 
    <init-param> 
     <param-name>applicationFactoryClassName</param-name> 
     <param-value>org.apache.wicket.spring.SpringWebApplicationFactory</param-value> 
    </init-param> 
    <init-param> 
     <param-name>configuration</param-name> 
     <param-value>${configuration.type}</param-value> 
    </init-param> 
</filter> 
<filter-mapping> 
    <filter-name>wicket.filter</filter-name> 
    <url-pattern>/app/*</url-pattern> 
</filter-mapping> 
<listener> 
    <display-name>spring context loader</display-name> 
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
</listener> 
<!-- Listener applicatif --> 
<listener> 
    <display-name>plop3Listener context loader</display-name> 
    <listener-class>com.plop2.plop3.plop3Listener</listener-class> 
</listener> 

的/plop3-admin-war/src/main/webapp/WEB-INF/spring-config/applicationContext.xml:

<import resource="applicationPropertiesContext.xml" /> 
<import resource="dependenciesInjectionContext.xml" /> 
<import resource="jpaDaoContext.xml" /> 
<import resource="transactionContext.xml" /> 
<import resource="wicketContext.xml" /> 

然后/ plop3管理员战/ src目录/主/ web应用/ WEB-INF /弹簧配置/ wicketContext.xml:

<bean id="wicketApplication" name="wicketApplication" 
    class="com.plop2.plop3.presentation.WicketApplication" scope="singleton"> 
</bean> 

我不明白为什么类不能被加载,plop3管理员提供商检票口出现在plop3管理员-war Maven依赖项列表。

这让我疯狂,两天,我在上面。

+0

这场战争是否包含WEB-INF库中的Wicket库? –

+0

是的Wicket库存在于Maven Dependancies列表中。原来,这个projet被开发成运行在Jonas服务器上,并且仍然在生产环境中运行。在本地开发中需要使它与Tomcat一起运行。该项目是由其他团队创建的,我们只是像这样获得项目。 – freak0

+0

不,不在POM中,我的意思是物理上产生的WAR文件 –

回答

1

尝试构建WAR并将其部署到在eclipse外完全运行的tomcat,方法是将WAR放入webapps目录并运行启动脚本。

这将确定问题是库依赖性还是在eclipse工作区设置中。

如果您怀疑工作区设置,请尝试关闭eclipse中的所有项目并从工作区中删除它们。从命令行执行mvn clean install并确保可行。

然后删除以下所有的Eclipse文件:.project.classpath.settings,选择Import as Maven Project再试,确保Eclipse使用相同的Maven和相同的settings.xml作为命令行。

如果问题仍然存在,尝试在你的web.xml文件的开始添加一个ServletContextListener,并打印出的一些涉及到的类的位置:

System.out.println("All locations of missing class WicketApplication: " + getClass().getclassLoader().getResources("com/plop2/plop3/presentation/WicketApplication.class")); 

System.out.println("Currently used version of WicketApplication: " + getClass().getclassLoader().getResource("com/plop2/plop3/presentation/WicketApplication.class")); 

有该类两种解释没有发现异常:或者该类不在类路径中(因为该jar不在或由于eclipse classpath问题),或者该类在那里,但是它不是需要它的类可见的,因为需要它的类是在服务器类加载器中。

另外检查JHades,我写的帮助diagnose classpath problems的工具。

+0

它的工作原理。一些“.settings”和“.project”文件来自坏svn清理,然后一些pom.xml错误配置。经过一些修改后,这是很好的。谢谢你的帮助。 – freak0

相关问题