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

标签 java hibernate logging glassfish-4.1

我正在部署一个使用 Maven 构建的 EAR 应用程序,该应用程序在其中一个模块中具有以下依赖项:

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-entitymanager</artifactId>
    <version>5.1.0.Final</version>
</dependency>

当我尝试在 Glassfish Server 4.1 中部署应用程序时,出现以下错误:

Fatal:   java.lang.NoSuchMethodError: org.jboss.logging.Logger.debugf(Ljava/lang/String;I)V
        at org.hibernate.internal.NamedQueryRepository.checkNamedQueries(NamedQueryRepository.java:149)

为了解决这个问题,我做了一些研究,并做了以下尝试:

第一次尝试

我找到了this question并使用 this article 中的脚本按照问题和this issue中的建议清理Glassfish的osgi缓存Glassfish/Payara Github 存储库的。重新启动服务器。同样的错误。

第二次尝试

我找到了this question并尝试了第一个答案的建议,如下所示:查看依赖关系树,我发现 hibernate-entitymanager 具有以下依赖关系:

<dependency>
    <groupId>org.jboss.logging</groupId>
    <artifactId>jboss-logging</artifactId>
    <version>3.3.0.Final</version>
    <scope>compile</scope>
</dependency>

所以我搜索了我的服务器安装并找到了jboss-logging.jar。安装的版本是 3.1.0-GA (我现在不确定,但肯定是依赖项的先前版本)。我从 Maven Central Repository 下载了 jboss-logging-3.3.0.Final.jar并替换了我的服务器安装中的那个。重新启动服务器。同样的错误。

第三次尝试

上一篇文章(和其他文章)中的一些评论建议添加一个属性org.jboss.logging.provider=slf4j,因为我正在使用这些依赖项进行日志记录:

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>1.7.21</version>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-log4j12</artifactId>
    <version>1.7.21</version>
    <scope>test</scope>
</dependency>

我在 /glassfish/domains/domain1/config/ 文件夹中找到了一些 .properties 文件,但它们都不包含这样的属性,我不知道在添加该属性的文件。我还在管理控制台中进行了一些搜索,但没有找到在哪里添加属性。我发现的唯一日志配置是配置日志级别。

之后,我找到了在管理控制台中放置 Glassfish 服务器的一些 JVM 选项的位置,并添加了 -Dorg.jboss.logging.provider=slf4j 作为选项,但对我来说不起作用(更重要的是,我必须重新启动计算机才能将 Glassfish 置于归零状态)

第四次尝试

在此之前,我遇到了一个问题,并在 StackOverflow 中提出了另一个问题。指导this comment在那篇文章中,我更改了项目配置,但没有发生任何事情(我通过对依赖项进行一点更改解决了该问题,答案仍在等待中)

经过所有的尝试,我已经没有想法了,问题仍然存在。我不知道可能是什么问题。任何指导、帮助或答案将不胜感激。如果有人需要有关情况的更多详细信息,请告诉我。

预先感谢您的合作。

<小时/>

编辑1

我正在搜索并发现this article它的内容与我所做的类似,并为 jboss-logging 添加了提供的依赖项,如下所示:

<dependency>
    <groupId>org.jboss.logging</groupId>
    <artifactId>jboss-logging</artifactId>
    <version>3.3.0.Final</version>
    <scope>provided</scope>
</dependency>

但是错误仍然存​​在。显然这是服务器的问题,但我不知道是什么。我正在使用 GlassFish Server 开源版 4.1(内部版本 13)

最佳答案

我使用 JBoss 服务器 7.1 来部署我的项目。就我而言,此错误是由于我在项目中使用 jboss-logging-3.3.0.Final.jar 但 JBoss 7 有 jboss-logging-3.1.0.GA.jar (/opt/jboss-as-7.1.1.Final/modules/org/jboss/logging/main/) 默认情况下。所以,这可能是由于 jar 冲突或 jboss-logging-3.1.0.GA.jar 中不存在方法,我不确定。但是用 jboss-logging-3.3.0.Final.jar 替换 jboss-logging-3.1.0.GA.jar 并更改 module.xml 中的映射(位于上述相同位置),如下所示

<module xmlns="urn:jboss:module:1.1" name="org.jboss.logging">
    <resources>
        <resource-root path="jboss-logging-3.3.0.Final.jar"/>
        <!-- Insert resources here -->
    </resources>
    <dependencies>
        <module name="org.jboss.logmanager"/>
    </dependencies>
</module>

错误消失了。希望对您有所帮助。

关于java - hibernate-entitymanager NoSuchMethodError : org. jboss.logging.Logger.debugf(Ljava/lang/String;I)V,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37767564/

相关文章:

java - 具有 "in"运算符和空列表的条件

php - Linux Apache2 PHP 5.3 日志文件的正确权限是什么?

java - 带数组的二项式系数

java - 如何获取 NumberPicker 小部件的值?

java函数确定具有给定宽度的图像的高度?

java - 添加validation-api-2.0.1.final.jar会出现错误

Java HTML->PDF 解决方案?

hibernate - JPA:如何使用HQL检查NULL查询参数值?

Python 日志在 stdout 中多次显示

string - 通过 Powershell 进行日志解析 - 打印第 n 个元素之后的所有数组元素