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

Maven打包jar运行报NoClassDefFoundError 已添加Hibernate依赖未生效

根因说明

  • 默认maven-jar-plugin仅会将项目自身的编译产物打入jar包,不会包含Hibernate、PostgreSQL驱动这类第三方依赖。你配置的<addClasspath>true只是在jar包的MANIFEST.MF文件中写入了依赖的文件名列表,不会把依赖本身打包到jar内,运行时如果对应依赖不在类路径下,就会抛出NoClassDefFoundError异常。
  • 你当前pom中仅声明了编译期依赖,没有配置打包时合并第三方依赖的逻辑,因此直接运行打包产物会找不到类。

常见解决方案

不需要手动为每个依赖单独指定类路径,以下两种方案均可解决问题:

方案1:使用maven-assembly-plugin打可执行fat jar

该插件会将所有第三方依赖和项目自身代码合并到同一个jar包中,直接运行即可。需要将插件配置放到pom的<build><plugins>节点下(注意不要放在pluginManagement节点内,pluginManagement仅用于统一声明插件版本,不会触发插件执行):

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-assembly-plugin</artifactId>
    <version>3.3.0</version>
    <configuration>
        <archive>
            <manifest>
                <mainClass>com.ziqi.App</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 clean package,target目录下会生成后缀为jar-with-dependencies的jar包,直接用java -jar 对应jar包名即可运行。

方案2:使用maven-shade-plugin打包

如果存在依赖冲突、资源文件合并等复杂需求,可以使用shade插件,配置如下:

<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>com.ziqi.App</mainClass>
                    </transformer>
                </transformers>
            </configuration>
        </execution>
    </executions>
</plugin>

执行打包命令后生成的jar包即可直接运行。

如果你不想把所有依赖打进同一个jar包,也可以将所有第三方依赖放到同一个lib目录下,运行时执行java -cp "你的jar包名:lib/*" com.ziqi.App即可,不需要逐个指定依赖名称。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 20:36:03