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

Maven引入Hibernate依赖后IDEA运行正常 控制台执行jar包抛出异常

异常触发原因

  • 该错误本质是运行时classpath缺失Hibernate依赖的JBoss Logging相关实现类,或日志服务配置被覆盖。
  • IntelliJ IDEA运行时会自动将所有Maven依赖加载到classpath,因此运行正常;直接控制台运行jar时,若jar未内置依赖、或打fatjar时合并资源出错,就会触发该异常。
  • Hibernate 5.x依赖JBoss Logging框架,该框架会动态生成org.hibernate.internal.CoreMessageLogger这类日志接口的实现类,若打包时缺失相关依赖或服务注册配置,就会抛出实现类未找到的错误。

解决方案

1. 显式引入JBoss Logging依赖

先在pom.xml中添加JBoss Logging依赖,避免传递依赖版本冲突:

<dependency>
    <groupId>org.jboss.logging</groupId>
    <artifactId>jboss-logging</artifactId>
    <version>3.4.2.Final</version>
</dependency>

2. 正确打包包含所有依赖的可执行jar

默认maven-jar-plugin不会将依赖打入jar包,需要选用专门的打包插件:

普通Java项目使用maven-assembly-plugin

<plugin>
    <artifactId>maven-assembly-plugin</artifactId>
    <configuration>
        <archive>
            <manifest>
                <mainClass>替换为你的项目主类全限定名</mainClass>
            </manifest>
        </archive>
        <descriptorRefs>
            <descriptorRef>jar-with-dependencies</descriptorRef>
        </descriptorRefs>
    </configuration>
    <executions>
        <execution>
            <id>make-assembly</id>
            <phase>package</phase>
            <goals>
                <goal>single</goal>
            </goals>
        </execution>
    </executions>
</plugin>

执行mvn package后,使用生成的带jar-with-dependencies后缀的jar包运行即可。

存在多依赖资源合并冲突时使用maven-shade-plugin

如果打fatjar后仍报错,大概率是多个依赖的META-INF/services配置被覆盖,使用以下配置合并资源:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-shade-plugin</artifactId>
    <version>3.2.4</version>
    <executions>
        <execution>
            <phase>package</phase>
            <goals>
                <goal>shade</goal>
            </goals>
            <configuration>
                <transformers>
                    <!-- 合并所有服务注册配置 -->
                    <transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/>
                    <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                        <mainClass>替换为你的项目主类全限定名</mainClass>
                    </transformer>
                </transformers>
            </configuration>
        </execution>
    </executions>
</plugin>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 06:09:03