我正在部署一个用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)为了解决这个问题,我做了一些研究,并做了以下尝试:
首次尝试
我找到了这个问题,并使用这篇文章中的脚本来清理Glassfish的osgi缓存,就像问题和Glassfish/Payara存储库的本期中所建议的那样。重新启动服务器。同样的错误。
第二次尝试
我找到了这个问题并尝试了第一个答案的建议,如下所示:查看依赖树,我发现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 (我现在不确定,但肯定是依赖项的前一个版本)。我从jboss-logging-3.3.0.Final.jar中下载了Maven中央储存库,并替换了服务器安装中的那个。重新启动服务器。同样的错误。
第三次尝试
上一篇文章中的一些注释(以及其他评论)建议添加一个属性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>我在.properties文件夹中找到了一些/glassfish/domains/domain1/config/文件,但是没有一个包含这样的属性,我不知道在哪个文件中添加该属性。我还在Admin控制台中进行了一些搜索,但没有找到添加属性的位置。我发现的唯一日志记录配置是配置日志记录级别。
在那之后,我找到了在管理控制台中放置Glassfish服务器的一些JVM选项,并添加了-Dorg.jboss.logging.provider=slf4j作为选项,但对我来说不起作用(更重要的是,我不得不重新启动我的计算机,才能将Glassfish放到底层0)。
第四次尝试
在此之前,我遇到了一个问题,并在StackOverflow中提出了另一个问题。在这句话的指导下,在那篇文章中,我更改了项目配置,但是什么也没有发生(我解决了这个问题,在我的依赖项中做了一点改变,答案仍在等待)
在所有的尝试之后,我的想法已经没有了,问题依然存在。我不知道有什么问题。任何指导,帮助或回答都将是非常感谢的。如果有人需要更多关于情况的细节,请告诉我。
谢谢你的合作。
编辑1
我搜索并找到了这篇文章,它与我所做的类似,并为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 (build 13)
发布于 2017-04-13 11:46:13
我使用JBoss服务器7.1部署我的项目。在我的例子中,这个错误是由于我在我的项目中使用了JBoss 3.3.0.Final.jar,但是jboss 7默认情况下有一个jboss 3.1.0.GA.jar。所以,这可能是由于jar冲突或方法不存在于jboss 3.1.0.GA.jar中,我不确定。但是,将jboss 3.1.0.GA.jar替换为jboss 3.3.0.Final.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>错误就消失了。希望能帮上忙。
发布于 2016-06-14 21:40:10
这是因为GlassFish附带了早期版本的JBoss日志记录,而应用程序正在获取它,因此出现了NoSuchMethod错误。随JBoss 4.1提供的GlassFish日志记录版本没有定义方法。您可以尝试替换glassfish模块目录中的jboss版本,这可能有效,也可能不起作用,但看起来您尝试过这种方法,但失败了。
另一个选项是升级到最新的Payara 4.1.1.162,它附带了JBoss日志3.3.0.Final。
发布于 2017-08-08 15:38:34
块Glassfish,以便在提供项目库时使用自己的lib。
只需在glassfish-web.xml目录中创建一个WEB-INF文件即可。文件的内容如下所示:
<?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不加载它的内部库,而是从您的项目中加载库。
https://stackoverflow.com/questions/37767564
复制相似问题