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

使用Maven Shade Plugin构建Fat Jar时遭遇NoClassDefFoundError异常

问题分析与解决方案

你的报错核心原因是Maven Shade插件的配置存在两处关键错误,导致依赖未被正确打包进Fat Jar:

  1. commons-cli的groupId匹配错误:你pom中依赖的commons-cli groupId是commons-cli,但Shade配置里写的是org.apache.commons:commons-cli,这个匹配规则找不到对应的依赖,所以该类库没被打包。
  2. 依赖打包范围不全:当前只配置了包含commons-lang3和commons-cli,但项目还依赖derby、guava以及本地的studentdb,这些都需要加入打包范围;另外system scope的依赖默认不会被Shade插件处理,需要显式配置。

修改后的Maven Shade插件配置

替换你pom中原来的shade插件部分:

<!-- Maven Shade Plugin -->
<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>
                <!-- 包含所有需要的依赖 -->
                <artifactSet>
                    <includes>
                        <include>commons-cli:commons-cli</include>
                        <include>org.apache.derby:derby</include>
                        <include>com.google.guava:guava</include>
                        <include>nz.ac.wgtn.swen301:studentdb</include>
                    </includes>
                </artifactSet>
                <!-- 允许打包system scope的本地依赖 -->
                <includeSystemScope>true</includeSystemScope>
                <transformers>
                    <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                        <mainClass>nz.ac.wgtn.swen301.assignment1.cli.StudentManagerUI</mainClass>
                    </transformer>
                </transformers>
            </configuration>
        </execution>
    </executions>
</plugin>

关键修改说明

  • 修正了commons-cli的groupId匹配规则,确保能正确识别并打包该依赖。
  • 补充了项目运行必需的derby、guava、studentdb依赖的打包规则。
  • 新增<includeSystemScope>true</includeSystemScope>,让Shade插件处理本地的system scope依赖。
  • 若想简化配置,可直接删除<artifactSet>节点,默认会自动打包所有compile/runtime scope的依赖(test scope除外)。

验证步骤

  1. 清理旧构建产物:
mvn clean
  1. 重新构建打包:
mvn package
  1. 运行生成的Fat Jar(默认位于target目录,名称为assignment1-1.0.0.jar):
java -jar target/assignment1-1.0.0.jar

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 21:55:54