java.lang.NoSuchMethodError: org.jboss.logging.Logger.debugf(Ljava/lang/String;I)V Exception while migrating from 12.1.3 to 12.2

java.lang.NoSuchMethodError: org.jboss.logging.Logger.debugf(Ljava/lang/String;I)V Exception while migrating from 12.1.3 to 12.2

我正在从 JDev 12.1.3 迁移到 12.2.0。现在在编译过程中出现了一些问题,但是已经通过修改 class 路径解决了。 现在,当我进行部署时,它会向我显示一个异常。那就是...

"java.lang.NoSuchMethodError: org.jboss.logging.Logger.debugf(Ljava/lang/String;I)V"

我正在使用以下依赖项..

<dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>5.2.0.Final</version>
            <type>jar</type>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.hibernate.common</groupId>
            <artifactId>hibernate-commons-annotations</artifactId>
            <version>5.0.1.Final</version>
            <type>jar</type>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.hibernate.javax.persistence</groupId>
            <artifactId>hibernate-jpa-2.1-api</artifactId>
            <version>1.0.0.Final</version>
            <type>jar</type>
            <scope>provided</scope>
        </dependency>

除了这些依赖项,我还查看了 "C:\oracle_home12c\wlserver\modules" 文件夹,发现有一个 "org.jboss.logging.jboss-logging.jar" 文件。 我从 "jboss-logging-3.3.0.Final" 替换了 maven repo 文件。 我还查看了 "jboss-logging-3.3.0.Final" jar 文件。有一个 Logger class 文件,但它不包含 debugf(String) 方法。

异常类型;

Caused by: java.lang.NoSuchMethodError: org.jboss.logging.Logger.debugf(Ljava/lang/String;I)V
    at org.hibernate.internal.NamedQueryRepository.checkNamedQueries(NamedQueryRepository.java:149)
    at org.hibernate.internal.SessionFactoryImpl.checkNamedQueries(SessionFactoryImpl.java:764)
    at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:495)
    at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:444)
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:802)
    at org.hibernate.jpa.HibernatePersistenceProvider.createContainerEntityManagerFactory(HibernatePersistenceProvider.java:135)
    at weblogic.persistence.BasePersistenceUnitInfo.initializeEntityManagerFactory(BasePersistenceUnitInfo.java:611)

有人可以帮助解决这个问题吗?

提前致谢

我不知道 JDev 类加载是如何工作的,但也许它采用了错误版本的 jboss-logging,它没有该方法?尝试从模块目录中删除它。并确保您的应用程序捆绑 jboss-logging 在 .war 中。应该是Hibernate的依赖引入的。如果没有,将其添加到 pom.xml.

如果您使用的是 glassfish 服务器,则问题可能出在 glassfish 提供的库上。这个错误是因为使用了不兼容的版本。

只需在 WEB-INF 目录中创建一个 glassfish-web.xml 文件。文件内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE glassfish-web-app PUBLIC "-//GlassFish.org//DTD GlassFish Application Server 3.1 Servlet 3.0//EN" "http://glassfish.org/dtds/glassfish-web-app_3_0-1.dtd">
<glassfish-web-app>
     <class-loader delegate="false"/>
</glassfish-web-app>

这确保 glassfish 不会加载它的内部库,而是加载您项目中的库。