应用程序在eclipse中运行良好,但在手动部署时无法启动

时间:2010-09-15 10:19:59

标签: eclipse spring maven-2 tomcat maven

我使用SpringFramework3.0.3.RELEASE进行Web应用程序,在Eclipse中使用m2eclipse插件开发并部署到Tomcat6.0.26中。我可以从Eclipse运行它,但是当复制目标WAR int同一个tomcat实例(首先删除WTP webapp)并重启时,我看到以下异常:

Sep 14, 2010 5:54:42 PM org.apache.catalina.core.ApplicationContext log
INFO: Initializing Spring root WebApplicationContext
Sep 14, 2010 5:54:45 PM org.apache.catalina.core.StandardContext listenerStart
SEVERE: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'onboardSessionFactory' defined in class path resource [applicationContext.xml]: Cannot resolve reference to bean 'customListener' while setting bean property 'eventListeners' with key [TypedStringValue: value [pre-insert], target type [null]]; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'customListener' defined in class path resource [applicationContext.xml]: Instantiation of bean failed; nested exception is java.lang.NoClassDefFoundError: Could not initialize class org.apache.log4j.LogManager
 at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:328)
 at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:106)
 at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveManagedMap(BeanDefinitionValueResolver.java:383)
 at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:161)
 at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1317)
 at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1076)
 at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:517)
 at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
 at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:291)
 at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
 at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:288)
 at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:190)
 at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:557)
 at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:895)
 at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:425)
 at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:276)
 at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:197)
 at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:47)
 at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3972)
 at org.apache.catalina.core.StandardContext.start(StandardContext.java:4467)
 at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791)
 at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771)
 at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:546)
 at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:905)
 at org.apache.catalina.startup.HostConfig.deployWARs(HostConfig.java:740)
 at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:500)
 at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1277)
 at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:321)
 at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
 at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)
 at org.apache.catalina.core.StandardHost.start(StandardHost.java:785)
 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:519)
 at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
 at org.apache.catalina.startup.Catalina.start(Catalina.java:581)
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
 at java.lang.reflect.Method.invoke(Method.java:597)
 at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
 at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'customListener' defined in class path resource [applicationContext.xml]: Instantiation of bean failed; nested exception is java.lang.NoClassDefFoundError: Could not initialize class org.apache.log4j.LogManager
 at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:955)
 at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:901)
 at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:485)
 at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
 at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:291)
 at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
 at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:288)
 at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:190)
 at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:322)
 ... 41 more
Caused by: java.lang.NoClassDefFoundError: Could not initialize class org.apache.log4j.LogManager
 at org.apache.log4j.Logger.getLogger(Logger.java:117)
 at com.mycompany.listener.CustomHibernateListener.<clinit>(CustomHibernateListener.java:69)
 at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
 at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
 at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
 at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
 at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:126)
 at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:71)
 at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:948)
 ... 49 more
Sep 14, 2010 5:54:50 PM org.apache.catalina.core.ApplicationContext log
INFO: Closing Spring root WebApplicationContext

我已经检查过,唯一的org.apache.log4j.Logger.class文件位于我的应用程序的log4j-1.2.14.jar中。 LogManager存在于同一个包中,但报告为错过。我的pom.xml:

<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>com.mycompany</groupId>
 <artifactId>mainProject</artifactId>
 <version>1.1.8</version>
 <packaging>war</packaging>

 <build>
  <sourceDirectory>src</sourceDirectory>  
  <plugins>           
   <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-war-plugin</artifactId>
    <version>2.1</version>
    <configuration>
     <webXml>WebContent/WEB-INF/web.xml</webXml>
     <webResources>
      <resource> 
       <directory>src</directory>
       <targetPath>WEB-INF/classes</targetPath> 
       <excludes>
        <exclude>**/*.java</exclude> 
       </excludes> 
      </resource>
     </webResources>
     <warSourceDirectory>WebContent</warSourceDirectory>
    </configuration>
   </plugin>     

   <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>2.3.1</version>    
   </plugin>

  </plugins>
 </build>
 <repositories>..</repositories>

 <dependencies>

  <dependency>
   <groupId>javax.servlet</groupId>
   <artifactId>servlet-api</artifactId>
   <version>2.5</version>
   <type>jar</type>
   <scope>provided</scope>
  </dependency>

  <dependency>
   <groupId>dom4j</groupId>
   <artifactId>dom4j</artifactId>
   <version>1.6.1</version>
   <type>jar</type>
  </dependency>

  <!-- Hibernate, Hibernate Search and dependencies -->
  <dependency>
   <groupId>org.hibernate</groupId>
   <artifactId>hibernate-search</artifactId>
   <version>3.2.0.Final</version>
  </dependency>
  <dependency>
   <groupId>commons-dbcp</groupId>
   <artifactId>commons-dbcp</artifactId>
   <version>1.4</version>
  </dependency>
  <dependency>
   <groupId>org.apache.lucene</groupId>
   <artifactId>lucene-queryparser</artifactId>
   <version>2.9.2</version>
  </dependency>
  <dependency>
   <groupId>javassist</groupId>
   <artifactId>javassist</artifactId>
   <version>3.8.0.GA</version>
  </dependency>
  <dependency>
   <groupId>org.hibernate</groupId>
   <artifactId>hibernate-annotations</artifactId>
   <version>3.5.0-Final</version>
  </dependency>

  <!-- Spring Framework, Spring Security and dependencies -->
  <dependency>
   <groupId>org.springframework.security</groupId>
   <artifactId>spring-security-core</artifactId>
   <version>3.0.3.RELEASE</version>
   <type>jar</type>
  </dependency>   
  <dependency>
   <groupId>org.springframework</groupId>
   <artifactId>spring-web</artifactId>
   <version>3.0.3.RELEASE</version>
   <type>jar</type>
  </dependency>
  <dependency>
   <groupId>org.springframework</groupId>
   <artifactId>spring-orm</artifactId>
   <version>3.0.3.RELEASE</version>
   <type>jar</type>
  </dependency>  

  <!-- JUnit, JSFUnit and etc. -->
  <dependency>
   <groupId>org.jboss.jsfunit</groupId>
   <artifactId>jboss-jsfunit-core</artifactId>
   <version>1.3.0.Final</version>
  </dependency>

  <!--  JSF -->
  <dependency>
   <groupId>javax.faces</groupId>
   <artifactId>jsf-api</artifactId>
   <version>2.0.2-FCS</version>
  </dependency>
  <dependency>
   <groupId>javax.faces</groupId>
   <artifactId>jsf-impl</artifactId>
   <version>2.0.2-FCS</version>
  </dependency>

  <!-- PrimeFaces and dependencies -->
  <dependency>
   <groupId>org.primefaces</groupId>
   <artifactId>primefaces</artifactId>
   <version>2.1.RC1</version>
  </dependency>
  <dependency>
   <groupId>commons-fileupload</groupId>
   <artifactId>commons-fileupload</artifactId>
   <version>1.2.1</version>
   <type>jar</type>
   <scope>compile</scope>
  </dependency>

  <!-- Sintecmedia infrastructure -->
  <dependency>
   <groupId>com.mycompany</groupId>
   <artifactId>rc-infra</artifactId>
   <version>1.2</version>
  </dependency>

 </dependencies>

</project>

来自infra项目的另一个pom.xml:

<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>com.mycompany/groupId>
 <artifactId>rc-infra</artifactId>
 <packaging>jar</packaging>
 <version>1.2</version>
 <name>infra</name>
 <description>Spring-Hibernate Infrastructure</description>

 <repositories>..</repositories>

 <build>
        <defaultGoal>install</defaultGoal>
        <sourceDirectory>src</sourceDirectory>
        <plugins>

            <!-- http://maven.apache.org/plugins/maven-clean-plugin/clean-mojo.html -->
            <plugin>
                <artifactId>maven-clean-plugin</artifactId>
                <version>2.1</version>
            </plugin>

            <!-- http://maven.apache.org/plugins/maven-compiler-plugin/compile-mojo.html -->
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>                 
                    <source>1.5</source>
                    <target>1.5</target>
                    <showDeprecation>true</showDeprecation>
                    <compilerArgument>-Xlint:all</compilerArgument>
                </configuration>
            </plugin>

   <plugin>
     <groupId>org.apache.maven.plugins</groupId>
     <artifactId>maven-source-plugin</artifactId>
     <executions>
       <execution>
         <id>attach-sources</id>
         <goals>
           <goal>jar</goal>
         </goals>
       </execution>
     </executions>
   </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-eclipse-plugin</artifactId>
                <version>2.6</version>
                <configuration>
                    <workspace>${eclipse.workspace.dir}</workspace>
                </configuration>
            </plugin>

            <plugin>
             <groupId>org.apache.maven.plugins</groupId>
             <artifactId>maven-javadoc-plugin</artifactId>
             <version>2.7</version>
             <configuration>
              <outputDirectory>${eclipse.workspace.dir}/doc</outputDirectory>
              <sourcePath>${eclipse.workspace.dir}/src/main/java</sourcePath>
             </configuration>
            </plugin>
        </plugins>
    </build>

    <dependencies>

     <dependency>
         <groupId>log4j</groupId>
         <artifactId>log4j</artifactId>
         <version>1.2.14</version>
        </dependency>

  <!-- Hibernate dependencies -->
        <dependency>
         <groupId>org.hibernate</groupId>
         <artifactId>hibernate-core</artifactId>
         <version>3.5.1-Final</version>
        </dependency>

        <!-- Spring dependencies -->               
        <dependency>
         <groupId>org.springframework</groupId>
         <artifactId>spring-core</artifactId>
         <version>3.0.3.RELEASE</version>
        </dependency>                     
        <dependency>
         <groupId>org.springframework</groupId>
         <artifactId>spring-context</artifactId>
         <version>3.0.3.RELEASE</version>
        </dependency>
        <dependency>
         <groupId>org.springframework</groupId>
         <artifactId>spring-tx</artifactId>
         <version>3.0.3.RELEASE</version>
        </dependency>

    </dependencies>

</project>

是否有人知道问题是什么以及如何解决?

3 个答案:

答案 0 :(得分:2)

NoClassDefFoundError: Could not initialize class org.apache.log4j.LogManager

此跟踪表示static org.apache.log4j.LogManager初始化块中存在问题。

我没有完整的解释,但我会先从你的依赖中做一些清理,它们有点乱:

  • 为什么你有几个版本的Hibernate JAR(3.5.0-Final和3.5.1-Final)。你应该让它们融合。
  • Hibernate使用SLF4J,你为什么不对log4j有任何绑定?
  • Spring使用commons-logging,我会将其配置为使用SLF4J来避免任何冲突和潜在的类加载问题。有关完整说明,请参阅Logging Dependencies in Spring

最后一点是IMO最重要的。

答案 1 :(得分:0)

app4类路径上的log4j属性文件是什么? LogManager可能会将其用作静态资源,如果缺少则不会初始化。

答案 2 :(得分:0)

Pascal的答案包含指向有用的“Spring中的Logging Dependencies”一文的链接。它描述了如何覆盖旧的commons-logging jar并使用slf4j或log4j。问题是log4j与commons-logging冲突。从spring-context的maven依赖项中排除它,解决了这个问题。但是,我仍然不明白为什么问题仅适用于手动部署,如果从Eclipse运行webapp,则不会发生这种情况?