2014-11-20 78 views
0

我有使用maven构建的Spring Web应用程序。我排除了从春季到使用SLF4J和Logback的commons-logging。但由于某些原因,部署失败,出现以下错误Spring项目部署抛出org.apache.commons.logging.Log的ClassNotFoundException异常

Caused by: java.lang.NoClassDefFoundError: Lorg/apache/commons/logging/Log; 
    at java.lang.Class.getDeclaredFields0(Native Method) 
    at java.lang.Class.privateGetDeclaredFields(Class.java:2436) 
    at java.lang.Class.getDeclaredFields(Class.java:1806) 
    at org.apache.catalina.util.Introspection.getDeclaredFields(Introspection.java:106) 
    at org.apache.catalina.startup.WebAnnotationSet.loadFieldsAnnotation(WebAnnotationSet.java:256) 
    at org.apache.catalina.startup.WebAnnotationSet.loadApplicationServletAnnotations(WebAnnotationSet.java:132) 
    at org.apache.catalina.startup.WebAnnotationSet.loadApplicationAnnotations(WebAnnotationSet.java:65) 
    at org.apache.catalina.startup.ContextConfig.applicationAnnotationsConfig(ContextConfig.java:334) 
    at org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:774) 
    at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:305) 
    at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117) 
    at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90) 
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5095) 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 
    ... 40 more 
Caused by: java.lang.ClassNotFoundException: org.apache.commons.logging.Log 
    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1295) 
    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1147) 
    ... 54 more 

我不知道是什么触发了应用程序服务器,以寻找公共记录,然后抱怨说,它不能找到它。我试图找出我的应用程序中可能导致此错误配置(maven的依赖树没有显示公共日志记录)。这里是我的Maven配置

<!-- Spring MVC --> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-context</artifactId> 
      <version>${spring-framework.version}</version> 
      <exclusions> 
       <exclusion> 
        <artifactId>commons-logging</artifactId> 
        <groupId>commons-logging</groupId> 
       </exclusion> 
      </exclusions> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-webmvc</artifactId> 
      <version>${spring-framework.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-jdbc</artifactId> 
      <version>${spring-framework.version}</version> 
     </dependency> 

     <dependency> 
     <groupId>org.springframework.data</groupId> 
     <artifactId>spring-data-oracle</artifactId> 
     <version>1.1.0.RELEASE</version> 
    </dependency> 

     <!-- Jackson --> 
     <dependency> 
      <groupId>com.fasterxml.jackson.core</groupId> 
      <artifactId>jackson-databind</artifactId> 
      <version>${jackson.databind-version}</version> 
     </dependency> 
     <!-- AspectJ --> 
     <dependency> 
      <groupId>org.aspectj</groupId> 
      <artifactId>aspectjrt</artifactId> 
      <version>${org.aspectj-version}</version> 
     </dependency> 
     <!-- Other Web dependencies --> 
<!--  <dependency> 
      <groupId>javax.servlet</groupId> 
      <artifactId>jstl</artifactId> 
      <version>${jstl.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>javax.servlet</groupId> 
      <artifactId>servlet-api</artifactId> 
      <version>${servlet.version}</version> 
      <scope>provided</scope> 
     </dependency> 
     <dependency> 
      <groupId>javax.servlet.jsp</groupId> 
      <artifactId>jsp-api</artifactId> 
      <version>${jsp.version}</version> 
      <scope>provided</scope> 
     </dependency> 
--> 
     <!-- Spring and Transactions --> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-tx</artifactId> 
      <version>${spring-framework.version}</version> 
     </dependency> 

     <!-- Logging with SLF4J & LogBack --> 

     <dependency> 
      <groupId>ch.qos.logback</groupId> 
      <artifactId>logback-classic</artifactId> 
      <version>${logback.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>ch.qos.logback</groupId> 
      <artifactId>logback-core</artifactId> 
      <version>${logback.version}</version> 
     </dependency> 

     <!-- Test Artifacts --> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-test</artifactId> 
      <version>${spring-framework.version}</version> 
      <scope>test</scope> 
     </dependency> 
     <dependency> 
      <groupId>junit</groupId> 
      <artifactId>junit</artifactId> 
      <version>${junit.version}</version> 
      <scope>test</scope> 
     </dependency> 

的依赖关系树:

Dependency tree

我也查到Apache公地任何隐藏的引用。但我找不到任何。不知道是什么原因导致了错误。我需要删除Apache Commons,并使Spring使用SLF4J和logback。任何见解都值得赞赏。

回答

2

您可以尝试添加jcl-over-slf4j依赖项,这是根据this documentation需要的。

<dependency>          
    <groupId>org.slf4j</groupId>     
    <artifactId>jcl-over-slf4j</artifactId>  
    <version>${jcloverslf4j.version}</version> 
</dependency> 

我希望它有帮助。

相关问题