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

Maven项目运行生成Jar报NoClassDefFoundError但类存在代码可正常执行

问题根因

Maven默认maven-jar-plugin打出来的包只包含项目自身的编译代码,不会把aspose-cells这类第三方依赖打进包内,也不会自动配置依赖的查找路径。
IntelliJ IDEA运行项目时会自动把所有Maven依赖加入运行时类路径,所以本地IDE测试完全正常。直接执行Maven生成的普通Jar包时,JVM找不到包外的aspose相关类,就会抛出NoClassDefFoundError。
你看到前3行日志正常输出、甚至输出文件生成成功,是因为代码执行到第44行首次调用SaveOptions相关逻辑时才会触发这个类的加载,这时候才抛出类找不到的错误,之前没用到该类的逻辑可以正常运行。

解决方法

配置Maven插件打包含所有依赖的可执行胖包即可,往pom.xml的<build><plugins>节点下加入如下配置:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-assembly-plugin</artifactId>
    <version>3.3.0</version>
    <configuration>
        <archive>
            <manifest>
                <!-- 替换为你自己的主类全限定名,对应报错信息中的src.main.java.MainClass -->
                <mainClass>src.main.java.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 clean package命令打包,target目录下会生成名称带jar-with-dependencies后缀的Jar包,直接运行这个包就不会出现类找不到的错误。
如果对包结构有要求,也可以替换为maven-shade-plugin实现胖包打包,效果一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 13:09:12