2015-07-21 91 views
29

我有一个问题,当我与休眠5休眠5 java.lang.NoSuchMethodError org.jboss.logging.Logger.debugf

Caused by: java.lang.NoSuchMethodError: org.jboss.logging.Logger.debugf(Ljava/lang/String;I)V 
at org.hibernate.internal.NamedQueryRepository.checkNamedQueries(NamedQueryRepository.java:149) [hibernate-core-5.0.0.CR2.jar:5.0.0.CR2] 
at org.hibernate.internal.SessionFactoryImpl.checkNamedQueries(SessionFactoryImpl.java:759) [hibernate-core-5.0.0.CR2.jar:5.0.0.CR2] 
at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:490) [hibernate-core-5.0.0.CR2.jar:5.0.0.CR2] 
at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:444) [hibernate-core-5.0.0.CR2.jar:5.0.0.CR2] 
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:708) [hibernate-core-5.0.0.CR2.jar:5.0.0.CR2] 
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:724) [hibernate-core-5.0.0.CR2.jar:5.0.0.CR2] 
at org.springframework.orm.hibernate4.LocalSessionFactoryBuilder.buildSessionFactory(LocalSessionFactoryBuilder.java:372) [spring-orm-4.1.7.RELEASE.jar:4.1.7.RELEASE] 
at org.springframework.orm.hibernate4.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:454) [spring-orm-4.1.7.RELEASE.jar:4.1.7.RELEASE] 
at org.springframework.orm.hibernate4.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.java:439) [spring-orm-4.1.7.RELEASE.jar:4.1.7.RELEASE] 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1633) [spring-beans-4.1.7.RELEASE.jar:4.1.7.RELEASE] 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1570) [spring-beans-4.1.7.RELEASE.jar:4.1.7.RELEASE] 
... 23 more 

部署web应用程序使用Hibernate 4万事OK。

我看了一下类NamedQueryRepository在行149即类调用方法debugf这样

 log.debugf("Checking %s named HQL queries", namedQueryDefinitionMap.size()); 

我看不出问题

这里是我的依赖关系树

[INFO] ------------------------------------------------------------------------ 
[INFO] Building app Maven Webapp 1.0-SNAPSHOT 
[INFO] ------------------------------------------------------------------------ 
[INFO] 
[INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ app--- 
[INFO] +- org.springframework:spring-aspects:jar:4.1.7.RELEASE:compile 
[INFO] | \- org.aspectj:aspectjweaver:jar:1.8.6:compile 
[INFO] +- org.springframework:spring-tx:jar:4.1.7.RELEASE:compile 
[INFO] +- org.springframework:spring-beans:jar:4.1.7.RELEASE:compile 
[INFO] +- org.springframework:spring-context-support:jar:4.1.7.RELEASE:compile 
[INFO] +- org.springframework:spring-context:jar:4.1.7.RELEASE:compile 
[INFO] | \- org.springframework:spring-expression:jar:4.1.7.RELEASE:compile 
[INFO] +- org.springframework:spring-core:jar:4.1.7.RELEASE:compile 
[INFO] | \- commons-logging:commons-logging:jar:1.2:compile 
[INFO] +- org.springframework:spring-orm:jar:4.1.7.RELEASE:compile 
[INFO] +- org.springframework:spring-web:jar:4.1.7.RELEASE:compile 
[INFO] +- org.springframework:spring-aop:jar:4.1.7.RELEASE:compile 
[INFO] | \- aopalliance:aopalliance:jar:1.0:compile 
[INFO] +- org.springframework:spring-jdbc:jar:4.1.7.RELEASE:compile 
[INFO] +- org.springframework:spring-test:jar:4.1.7.RELEASE:test 
[INFO] +- junit:junit:jar:4.12:test 
[INFO] | \- org.hamcrest:hamcrest-core:jar:1.3:test 
[INFO] +- org.hibernate:hibernate-entitymanager:jar:5.0.0.CR2:compile 
[INFO] | +- org.jboss.logging:jboss-logging:jar:3.3.0.Final:compile 
[INFO] | +- org.hibernate:hibernate-core:jar:5.0.0.CR2:compile 
[INFO] | | +- antlr:antlr:jar:2.7.7:compile 
[INFO] | | \- org.jboss:jandex:jar:1.2.2.Final:compile 
[INFO] | +- dom4j:dom4j:jar:1.6.1:compile 
[INFO] | | \- xml-apis:xml-apis:jar:1.0.b2:compile 
[INFO] | +- org.hibernate.common:hibernate-commons-annotations:jar:5.0.0.Final:compile 
[INFO] | +- org.hibernate.javax.persistence:hibernate-jpa-2.1-api:jar:1.0.0.Final:compile 
[INFO] | +- org.apache.geronimo.specs:geronimo-jta_1.1_spec:jar:1.1.1:compile 
[INFO] | \- org.javassist:javassist:jar:3.18.1-GA:compile 
[INFO] +- org.hibernate:hibernate-c3p0:jar:5.0.0.CR2:compile 
[INFO] | \- com.mchange:c3p0:jar:0.9.2.1:compile 
[INFO] |  \- com.mchange:mchange-commons-java:jar:0.2.3.4:compile 
[INFO] +- org.primefaces:primefaces:jar:5.2.RC3:compile 
[INFO] +- org.apache.logging.log4j:log4j-api:jar:2.2:compile 
[INFO] +- org.apache.logging.log4j:log4j-core:jar:2.2:compile 
[INFO] \- net.sourceforge.jtds:jtds:jar:1.2.8:compile 
[INFO] ------------------------------------------------------------------------ 
[INFO] BUILD SUCCESS 
[INFO] ------------------------------------------------------------------------ 

回答

14

尝试将jboss-logging.jar升级到更新版本。您正在使用的那个似乎与Hibernate 5不兼容。

+3

这是一个更好的解决方案。我将jboss-logging.jar升级到3.3.0(在widlfly安装文件夹中搜索它),更改了module.xml中的文件名,现在所有东西都可以使用。我使用Wildfly 8与休眠5。 – tggm

+3

3.3.0.Final已经在使用,这是今天(一年后)的最新版本,所以没有什么可升级的。 –

+0

上面的mvn-tree表明OP已经在使用'org.jboss.logging:jboss-logging:jar:3.3.0.Final'。问题在于另一个工件带来了相同的类,并且在类路径中找到。 –

1

很可能您在应用程序的类路径中有过时的JBoss日志记录JAR。 Logger API是...f方法的一个相对较新的方法。 Hibernate 5直接依赖于Logging版本3.3.0,但有可能你的pom.xml中有一些依赖于早期版本。另一种可能性是您正在部署到日志API由容器提供的JBoss容器。然后你可能需要升级JBoss服务器,或者引入一个解决方法来更喜欢你的应用程序提供的类。

+0

实际上,我使用的是maven,而jboss-logging是休眠5的直接依赖。 –

+0

没错。我的答案解释了错误的JAR如何参与_尽管如此。由于您的dep树显示了正确版本的JBoss日志记录,另一个选项是从容器继承的类,它覆盖了您的应用程序的类。这是BTW日志类的一个非常常见的问题。 –

15

在我的情况下,罪魁祸首是泽西豆验证器工件。 出于某种原因,它的一个依赖关系bean-validation-2.4.0-b06.jar包含Jboss日志记录类。 我不得不排除弹簧引导起动球衣依赖的球衣豆验证和豆验证文物:

<dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-jersey</artifactId> 
     <exclusions> 
      <exclusion> 
       <artifactId>jersey-bean-validation</artifactId> 
       <groupId>org.glassfish.jersey.ext</groupId> 
      </exclusion> 
      <exclusion> 
       <artifactId>bean-validator</artifactId> 
       <groupId>org.glassfish.hk2.external</groupId> 
      </exclusion> 
     </exclusions> 
    </dependency> 

编辑:随着春天的引导1.3.0,这是固定的,上述排除不再是必要的。

+1

这对我来说非常合适,我需要将它添加到org.glassfish.ext - > jersey-spring3依赖项中。 –

+0

@danieln我想知道你是如何知道有问题的jar文件的。 mvn依赖项插件只显示1级深度,jboss级别深度2级。 –

+1

@FrancisZabala你可以使用你的IDE来解决这个问题,以及类似的问题。我正在使用Eclipse,并在搜索字段中使用Open Type对话框(ctrl-shift-T)并粘贴org.jboss.logging.Logger(异常中的类),从而导致有问题的bean-validator-2.4.0 -b31.jar显示在.m2 \ repository \ org \ glassfish \ hk2 \ external \ bean-validator \ 2.4.0-b31下的结果中,以及其他结果,它们是原始的jboss日志记录jar。 –

26

在玻璃鱼这个问题是由玻璃鱼模块的相关性碰撞造成的。如果你在glassfishdir/modules中检查lib列表,你会看到boss-logging.jar。你可以删除它并替换为最新的,比如org.jboss.logging:jboss-logging:jar:3.3.0.Final。它为我工作。

0

我也遇到过这个问题。这是固定的,对我来说

 <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-core</artifactId> 
      <version>4.2.1.RELEASE</version> 
      <exclusions> 
       <exclusion> 
        <groupId>commons-logging</groupId> 
        <artifactId>commons-logging</artifactId> 
       </exclusion> 
      </exclusions> 
     </dependency> 
1

我用得到同样的错误球衣弹簧-3和休眠5.0.1.Final.Excluding org.glassfish.hk2.external:从jersy弹簧豆验证-3并添加org.glassfish.jersey.ext:jersey-bean-validation为我工作。这里是我的最终依赖。

<dependency> 
    <groupId>org.glassfish.jersey.ext</groupId> 
    <artifactId>jersey-spring3</artifactId> 
    <version>2.22.2</version> 
    <exclusions> 
     <exclusion> 
      <groupId>org.glassfish.hk2.external</groupId> 
      <artifactId>bean-validator</artifactId> 
     </exclusion> 
    </exclusions> 
</dependency> 
<dependency> 
    <groupId>org.glassfish.jersey.ext</groupId> 
    <artifactId>jersey-bean-validation</artifactId> 
    <version>2.22.2</version> 
</dependency> 

来自:

<dependency> 
    <groupId>org.glassfish.jersey.ext</groupId> 
    <artifactId>jersey-spring3</artifactId> 
    <version>2.22.2</version> 
</dependency> 
3

当WebLogic服务器上部署的耳朵我也面临着这样那样的问题。 显然,weblogic也使用jboss日志记录系统,并使用它的旧版本。
我的修复程序:
添加“weblogic-application。XML”到META-INF文件夹与此内容:

<?xml version="1.0" encoding="UTF-8"?> 
    <weblogic-application> 
     <prefer-application-packages> 
      <package-name>org.jboss.logging.*</package-name> 
     </prefer-application-packages> 

     <prefer-application-resources> 
      <resource-name>org/jboss/logging/Logger.class</resource-name> 
     </prefer-application-resources> 
    </weblogic-application> 
0

我有spring4.2.1相同的一点改进+ hibernate5.0.2 + jersey2.23.1 我的解决方法是一样的:从jersy-spring-3剔除org.glassfish.hk2.external:bean-validator并添加org.glassfish.jersey.ext:jersey-bean-validation

<dependency> 
    <groupId>org.glassfish.jersey.ext</groupId> 
    <artifactId>jersey-spring3</artifactId> 
    <version>2.23.1</version> 
    <exclusions> 
    <exclusion> 
     <groupId>org.glassfish.hk2.external</groupId> 
     <artifactId>bean-validator</artifactId> 
    </exclusion> 
    </exclusions> 
</dependency> 
<dependency> 
    <groupId>org.glassfish.jersey.ext</groupId> 
    <artifactId>jersey-bean-validation</artifactId> 
    <version>2.23.1</version> 
</dependency> 

在我的产品环境,只是删除bean-validator-2.4.0-b34.jar并添加jersey-bean-validation-2.23.1.jar

0

这可以导致当依赖包括

<dependency> 
    <groupId>org.eclipse.persistence</groupId> 
    <artifactId>eclipselink</artifactId> 
    <version>2.6.2</version> 
</dependency> 

dependency使用exclusions元件排除它。

0

检查我的答案在NoSuchMethodError: org.jboss.logging.Logger.debugf

即使我有问题升级到Hibernate 5.2后,而罪魁祸首是“的jboss-记录3.3.0.Final”这是我看到出现在您的依赖了。 按照答案中共享链接的步骤,可以将jboss-logging的依赖关系减少到具有所需功能的3.2级别。

0

在我的情况下,问题是由即将从休眠-的Ehcache,我发现通过查看Maven依赖关系树作为传递依赖的是旧版本的jboss-伐木造成的。我通过增加排除来解决它:

<dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-ehcache</artifactId> 
     <version>${hibernate.version}</version> 
     <exclusions> 
      <exclusion> 
       <groupId>org.jboss.logging</groupId> 
       <artifactId>jboss-logging</artifactId> 
      </exclusion> 
     </exclusions> 
    </dependency> 
0

JBoss 6.1+ ??

我设置在JBoss中的模块org.jboss.logging对于JBoss-测井3.3.0.Final-红帽-1.jar。

它为我工作。

Att。,