You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Maven依赖冲突求助:java.lang.NoSuchMethodError异常排查

解决java.lang.NoSuchMethodError: org.jboss.logging.Logger.getMessageLogger异常

这个问题我太熟悉了——本质就是JBoss Logging版本和你的Hibernate EJB模块不兼容,导致Hibernate初始化时找不到它需要的方法。

问题拆解

先看你给出的异常信息:

java.lang.NoSuchMethodError: org.jboss.logging.Logger.getMessageLogger(Ljava/lang/Class;Ljava/lang/String;)Ljava/lang/Object;
发生在org.hibernate.ejb.Ejb3Configuration.(Ejb3Configuration.java:142)
调用链: org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:55)

NoSuchMethodError几乎都是依赖版本冲突的锅:Hibernate EJB(也就是Hibernate EntityManager)需要特定版本的JBoss Logging,但你的项目里要么引入了更低版本的JBoss Logging,要么有多个版本的JBoss Logging被引入,Maven自动仲裁选了个不兼容的。

一步步解决

1. 明确冲突来源

你已经用Maven命令排查JBoss Logging的依赖树了,这步很关键:

mvn dependency:tree -Dverbose -Dincludes=org.jboss.logging

从输出里重点找这几个信息:

  • 哪些依赖带进来了org.jboss.logging
  • 每个引入的版本号
  • Maven最终选中的版本(一般会标(selected)或者在依赖树最顶层显示)

2. 强制指定兼容版本

Hibernate EJB 3.x/4.x通常需要JBoss Logging 3.1.0.GA及以上版本;如果是Hibernate 5.x,对应JBoss Logging 3.3.x+更稳妥。你可以直接在pom.xml里声明这个依赖,强制Maven用兼容版本:

<dependency>
    <groupId>org.jboss.logging</groupId>
    <artifactId>jboss-logging</artifactId>
    <version>3.4.3.Final</version> <!-- 选和你Hibernate版本匹配的,比如Hibernate 4.x用3.2.x也可以 -->
</dependency>

3. 排除捣乱的依赖

如果发现某个第三方依赖硬塞了个旧版本的JBoss Logging,直接在那个依赖里排除它:

<dependency>
    <groupId>第三方依赖的groupId</groupId>
    <artifactId>第三方依赖的artifactId</artifactId>
    <version>xxx</version>
    <exclusions>
        <exclusion>
            <groupId>org.jboss.logging</groupId>
            <artifactId>jboss-logging</artifactId>
        </exclusion>
    </exclusions>
</dependency>

4. 验证修复

执行mvn clean install重新构建,再跑程序试试。跑完别忘了再执行一次dependency:tree命令,确认现在项目里只有一个兼容的JBoss Logging版本。

内容的提问来源于stack exchange,提问作者Rodrigo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:10:57