【问题标题】:hibernate-entitymanager NoSuchMethodError: org.jboss.logging.Logger.debugf(Ljava/lang/String;I)Vhibernate-entitymanager NoSuchMethodError: org.jboss.logging.Logger.debugf(Ljava/lang/String;I)V
【发布时间】:2016-06-11 19:07:16
【问题描述】:

我正在部署一个使用 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 中的脚本来清理Glassfish 的osgi 缓存,正如问题和Glassfish/Payara Github 存储库的this issue 中所建议的那样。重新启动了服务器。同样的错误。

第二次尝试

我找到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,并在我的服务器安装中替换了那个。重新启动了服务器。同样的错误。

第三次尝试

上一篇文章(和其他人)中的一些 cmets 建议添加属性 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 Open Source Edition 4.1(内部版本 13)

【问题讨论】:

    标签: java hibernate logging glassfish-4.1


    【解决方案1】:

    我使用 JBoss server 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>
    

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

    【讨论】:

      【解决方案2】:

      这是因为 GlassFish 附带了早期版本的 JBoss Logging,并且您的应用程序正在接收该版本,因此出现 NoSuchMethod 错误。 GlassFish 4.1 附带的 JBoss Logging 版本没有定义方法。您可以尝试在 glassfish 的模块目录中替换 jboss-logging 的版本,这可能有效也可能无效,但看起来您尝试过这种方法并失败了。

      另一种选择是升级到 JBoss Logging 3.3.0.Final 附带的最新 Payara 4.1.1.162。

      【讨论】:

        【解决方案3】:

        在提供项目库时阻止 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 不会加载它的内部库,而是从您的项目加载库。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-02-09
          • 1970-01-01
          • 2020-09-06
          • 2019-04-09
          • 1970-01-01
          • 2020-08-29
          相关资源
          最近更新 更多