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

如何解决Java.lang.NoClassDefFoundError?Maven打包Jar运行失败求助

问题解决:Maven打包Jar运行时NoClassDefFoundError

问题根源

你配置的maven-jar-plugin并不支持jar-with-dependencies这个描述符,这个参数是maven-assembly-plugin的专属配置。单独使用maven-jar-plugin打包出来的Jar仅包含你的业务代码,不会将依赖的mfl-core类打包进去,运行时自然找不到us.hebi.matlab.mat.types.MatFile类。

解决方案

方案1:使用maven-assembly-plugin打包含所有依赖的可执行Jar(推荐)

替换你当前的maven-jar-plugin配置,改用maven-assembly-plugin生成包含所有依赖的"胖包":

<build>
    <plugins>
        <!-- 移除原有的maven-jar-plugin配置,替换为以下内容 -->
        <plugin>
            <artifactId>maven-assembly-plugin</artifactId>
            <version>3.6.0</version>
            <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>
    </plugins>
</build>

执行打包命令:mvn clean package,打包完成后,target目录下会生成两个Jar文件,其中带-jar-with-dependencies后缀的就是包含所有依赖的可执行Jar,运行它:

java -jar target/你的项目名-版本号-jar-with-dependencies.jar

方案2:保留maven-jar-plugin,通过Manifest指定依赖路径

如果不想打胖包,可以配置maven-jar-plugin的Manifest,添加依赖Jar的路径,确保运行时依赖Jar和你的主Jar在同一目录:

<plugin>
    <artifactId>maven-jar-plugin</artifactId>
    <version>3.3.0</version>
    <configuration>
        <archive>
            <manifest>
                <mainClass>你的主类路径</mainClass>
                <!-- 自动添加依赖到Class-Path -->
                <addClasspath>true</addClasspath>
                <!-- 依赖Jar的存放位置,这里假设和主Jar同目录 -->
                <classpathPrefix>.</classpathPrefix>
            </manifest>
        </archive>
    </configuration>
</plugin>
<!-- 复制依赖到主Jar所在目录 -->
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-dependency-plugin</artifactId>
    <version>3.6.0</version>
    <executions>
        <execution>
            <id>copy-dependencies</id>
            <phase>package</phase>
            <goals>
                <goal>copy-dependencies</goal>
            </goals>
            <configuration>
                <outputDirectory>${project.build.directory}</outputDirectory>
            </configuration>
        </execution>
    </executions>
</plugin>

执行mvn clean package后,target目录下会有你的主Jar和所有依赖Jar,直接运行主Jar即可:

java -jar target/你的项目名-版本号.jar

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 09:15:31