2010-06-13 10 views
11

Tôi đang cố thiết lập một ứng dụng web với các phụ thuộc quản lý maven2. Ở đây, pom.xml của tôiHibernate, Spring và SLF4J Binding

<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>mtx-production</groupId> 
    <artifactId>mtx-production</artifactId> 
    <version>0.0.1</version> 
    <dependencies> 
     <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-core</artifactId> 
     <version>3.0.2.RELEASE</version> 
     </dependency> 
     <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-orm</artifactId> 
     <version>3.0.2.RELEASE</version> 
     <type>jar</type> 
     </dependency> 
     <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-web</artifactId> 
     <version>3.0.2.RELEASE</version> 
     <type>jar</type> 
     </dependency> 
     <dependency> 
     <groupId>mysql</groupId> 
     <artifactId>mysql-connector-java</artifactId> 
     <version>5.1.12</version> 
     </dependency> 
     <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-core</artifactId> 
     <version>3.5.1-Final</version> 
     <type>jar</type> 
     <scope>compile</scope> 
     </dependency> 
     <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-annotations</artifactId> 
     <version>3.5.1-Final</version> 
     <type>jar</type> 
     <scope>compile</scope> 
     </dependency> 
     <dependency> 
     <groupId>org.slf4j</groupId> 
     <artifactId>slf4j-log4j12</artifactId> 
     <version>1.5.8</version> 
     <type>jar</type> 
     <scope>compile</scope> 
     </dependency> 
     <dependency> 
     <groupId>log4j</groupId> 
     <artifactId>log4j</artifactId> 
     <version>1.2.14</version> 
     <type>jar</type> 
     <scope>compile</scope> 
     </dependency> 
    </dependencies> 
    <repositories> 
     <repository> 
      <id>jboss-releases</id> 
      <url>http://repository.jboss.org/maven2</url> 
     </repository> 
    </repositories> 
</project> 

Đúng nếu tôi có điều gì đó sai nhưng điều này sẽ hoạt động ?! Tôi chỉ nhận được trong nhật thực của mình ngoại lệ này

13.06.2010 16:48:15 org.springframework.context.support.AbstractApplicationContext$BeanPostProcessorChecker postProcessAfterInitialization 
    INFO: Bean 'dataSource' is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) 
    SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder". 
    SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details. 
    13.06.2010 16:48:15 org.springframework.beans.factory.support.DefaultSingletonBeanRegistry destroySingletons 
    INFO: Destroying singletons in org.s[email protected]366573: defining beans [org.springframework.context.annotation.internalConfigurationAnnotationProcessor,org.springframework.context.annotation.internalAutowiredAnnotationProcessor,org.springframework.context.annotation.internalRequiredAnnotationProcessor,org.springframework.context.annotation.internalCommonAnnotationProcessor,org.springframework.context.annotation.internalPersistenceAnnotationProcessor,org.springframework.beans.factory.config.PropertyPlaceholderConfigurer#0,dataSource,sessionFactory,org.springframework.aop.config.internalAutoProxyCreator,org.springframework.transaction.annotation.AnnotationTransactionAttributeSource#0,org.springframework.transaction.interceptor.TransactionInterceptor#0,org.springframework.transaction.config.internalTransactionAdvisor,myTxManager,org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor#0]; root of factory hierarchy 
    13.06.2010 16:48:15 org.springframework.web.context.ContextLoader initWebApplicationContext 
    SCHWERWIEGEND: Context initialization failed 
    org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor#0' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Initialization of bean failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Invocation of init method failed; nested exception is java.lang.NoClassDefFoundError: org/slf4j/impl/StaticLoggerBinder 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:527) 
     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:194) 
     at org.springframework.context.support.AbstractApplicationContext.registerBeanPostProcessors(AbstractApplicationContext.java:687) 
     at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:408) 
     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:3830) 
     at org.apache.catalina.core.StandardContext.start(StandardContext.java:4337) 
     at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045) 
     at org.apache.catalina.core.StandardHost.start(StandardHost.java:719) 
     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:566) 
     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:288) 
     at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413) 
    Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Invocation of init method failed; nested exception is java.lang.NoClassDefFoundError: org/slf4j/impl/StaticLoggerBinder 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1412) 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519) 
     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:194) 
     at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeansOfType(DefaultListableBeanFactory.java:387) 
     at org.springframework.beans.factory.BeanFactoryUtils.beansOfTypeIncludingAncestors(BeanFactoryUtils.java:266) 
     at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.detectPersistenceExceptionTranslators(PersistenceExceptionTranslationInterceptor.java:139) 
     at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.<init>(PersistenceExceptionTranslationInterceptor.java:79) 
     at org.springframework.dao.annotation.PersistenceExceptionTranslationAdvisor.<init>(PersistenceExceptionTranslationAdvisor.java:70) 
     at org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor.setBeanFactory(PersistenceExceptionTranslationPostProcessor.java:99) 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeAwareMethods(AbstractAutowireCapableBeanFactory.java:1431) 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1400) 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519) 
     ... 25 more 
    Caused by: java.lang.NoClassDefFoundError: org/slf4j/impl/StaticLoggerBinder 

Điều gì xảy ra với thiết lập của tôi?

Trả lời

14

Bao gồm slf4j-api trong phụ thuộc của bạn:

<dependency> 
    <groupId>org.slf4j</groupId> 
    <artifactId>slf4j-api</artifactId> 
    <version>1.5.8</version> 
</dependency> 

Loại trừ phụ thuộc commons-logging cho tối thiểu một trong những phụ thuộc vào mùa xuân tuyên bố của bạn và cung cấp mặt tiền slf4j cho commons-logging:

<dependency> 
    <groupId>org.springframework</groupId> 
    <artifactId>spring-context</artifactId> 
    <version>3.0.2.RELEASE</version> 
    <exclusions> 
    <exclusion> 
     <groupId>commons-logging</groupId> 
     <artifactId>commons-logging</artifactId> 
    </exclusion> 
    </exclusions> 
</dependency> 
<dependency> 
    <groupId>org.slf4j</groupId> 
    <artifactId>jcl-over-slf4j</artifactId> 
    <version>1.5.8</version> 
    <scope>runtime</scope> 
</dependency> 

Bao gồm phụ thuộc log4j cho việc ghi nhật ký của bạn cùng với mặt tiền slf4j:

<dependency> 
    <groupId>org.slf4j</groupId> 
    <artifactId>slf4j-log4j12</artifactId> 
    <version>1.5.8</version> 
    <scope>runtime</scope> 
</dependency> 
<dependency> 
    <groupId>log4j</groupId> 
    <artifactId>log4j</artifactId> 
    <version>1.2.14</version> 
    <scope>runtime</scope> 
</dependency> 

Bài đăng trên blog tuyệt vời để đọc thêm về ghi nhật ký với SLF4J và Spring có thể được tìm thấy trong blog Nhóm SpringSource dưới http://blog.springsource.com/2009/12/04/logging-dependencies-in-spring/.

+0

Làm theo lời khuyên này - giờ tôi đang nhận được một ngoại lệ khác. Vâng một bước tiến của nó. – onigunn

+0

Vẫn còn bất kỳ ngoại lệ liên quan đến ghi nhật ký nào? – stefanglase

+0

Không, bây giờ nó là 'java.lang.ClassNotFoundException: javassist.util.proxy.MethodFilter' nhập khẩu phụ thuộc javassist không hoạt động ... Hãy suy nghĩ tôi chỉ để cho thế giới này đốt cháy ... – onigunn

1

Điều này thực sự hiệu quả, liên kết slf4j-log4j12 chứa org/slf4j/impl/StaticLoggerBinder.

  1. Cố gắng xóa và triển khai lại ứng dụng của bạn, có thể đã xảy ra lỗi trong quá trình triển khai.
  2. Kiểm tra kỹ xem tải xuống slf4j-log4j12-1.5.8.jar không bị hỏng hay không (thử mở nó).
  3. Có thể thậm chí xóa nó và để cho maven tải lại nó.

Một số nhận xét không liên quan:

  • Thay vì lặp đi lặp lại các khuôn khổ phiên bản trong phụ thuộc, bạn nên sử dụng một tài sản. Ví dụ:

    ... 
    <properties> 
        <spring.version>3.0.2.RELEASE</spring.version> 
        ... 
    </properties> 
    <dependencies> 
        <dependency> 
        <groupId>org.springframework</groupId> 
        <artifactId>spring-core</artifactId> 
        <version>${spring.version}</version> 
        </dependency> 
        ... 
    </dependencies> 
    
  • hibernate-core là một sự phụ thuộc bắc cầu của hibernate-annotations, bạn không cần phải khai báo nó (nếu bạn muốn sử dụng JPA, bạn thực sự nên phụ thuộc vào hibernate-entitymanager).

+0

1. thực hiện nhiều lần - không thành công ở đây 2. tệp là ok - tôi có thể mở nó trong nhật thực hoặc mỗi fs 3. đã thử quá - không thành công nữa. Tôi đã thử thay vì 'slf4j-log4j12' các liên kết khác không có hiệu lực. Tôi chỉ nhận được ngoại lệ này – onigunn

1

Bạn đang thiếu

<dependency> 
    <groupId>org.slf4j</groupId> 
    <artifactId>slf4j-api</artifactId> 
    <version>1.5.8</version> 
    </dependency> 
+2

Đó là sự phụ thuộc chuyển tiếp của Hibernate, OP có sự phụ thuộc này. –

1

Hibernate phụ thuộc vào slf4j-api, vì vậy tuyên bố điều đó cho mình không nên thực hiện bất kỳ sự khác biệt. Ngoài ra, tôi không biết tại sao nó không hoạt động.