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

为何无法从控制台运行Hibernate Maven应用程序?

问题原因分析

你遇到的java.lang.NoClassDefFoundError: org/hibernate/cfg/Configuration本质是运行时缺少依赖类:

  • NetBeans IDE运行时会自动把你pom.xml中声明的所有依赖(比如hibernate-core、h2数据库驱动)加入到类路径里,所以能正常加载Hibernate的Configuration类;
  • 而你用maven-jar-plugin打包出来的JAR,只包含你自己项目的代码,完全不包含任何外部依赖包。当你用java -jar直接运行这个JAR时,JVM找不到Hibernate等第三方类,就会抛出这个错误。
解决方案

下面提供两种常用的解决方式,选一种适合你的即可:

方式1:用Maven插件直接运行(无需手动打包)

你已经在pom.xml里配置了exec-maven-plugin,直接用这个插件运行项目,它会自动把所有依赖加入类路径:

mvn exec:java -Dexec.mainClass="hibernate.SmartDevice"

这种方式适合开发阶段快速调试,不用处理打包问题。

方式2:打包成包含所有依赖的「可执行Fat Jar」

如果需要生成一个可以独立运行的JAR文件,推荐使用maven-shade-plugin,它会把所有依赖包合并到你的JAR里,生成一个"胖JAR"。修改你的pom.xml的<build><plugins>部分,添加这个插件的配置:

<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.ManifestResourceTransformer">
                        <!-- 指定你的主类 -->
                        <mainClass>hibernate.SmartDevice</mainClass>
                    </transformer>
                </transformers>
            </configuration>
        </execution>
    </executions>
</plugin>

配置完成后,执行打包命令:

mvn clean package

打包完成后,在target目录下会生成两个JAR:

  • 原来的hibernate-1.0-SNAPSHOT.jar:仅包含你自己的代码;
  • 新增的hibernate-1.0-SNAPSHOT-shaded.jar:包含所有依赖的可执行JAR。

运行这个带-shaded后缀的JAR即可:

java -jar target/hibernate-1.0-SNAPSHOT-shaded.jar
补充说明

你原来的maven-jar-plugin配置可以保留,它和maven-shade-plugin不会冲突,两者会生成不同的JAR文件。另外也可以用maven-assembly-plugin实现类似功能,但shade-plugin在处理依赖冲突、合并资源文件等场景下更友好。

内容的提问来源于stack exchange,提问作者Máté Belényesi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 09:23:08