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

Maven构建独立JAR时引入commons-codec遇类缺失问题求助

问题分析与解决方案

问题原因

出现java.lang.NoClassDefFoundError的核心原因是maven-assembly-plugin的配置未正确触发依赖打包逻辑,或者依赖的scope设置导致依赖未被纳入打包范围。

解决步骤

1. 确认依赖的Scope配置

检查pom.xml中commons-codec的依赖配置,确保scope为默认的compile(无需显式声明,默认即生效),避免设置为provided或test(这两类scope的依赖不会被打包进最终JAR):

<dependency>
    <groupId>commons-codec</groupId>
    <artifactId>commons-codec</artifactId>
    <version>1.15</version> <!-- 使用最新稳定版 -->
    <!-- 无需指定scope,默认compile -->
</dependency>

2. 修正maven-assembly-plugin配置

确保插件配置绑定到Maven的package生命周期,明确指定jar-with-dependencies描述符,同时配置主类入口:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-assembly-plugin</artifactId>
            <version>3.6.0</version> <!-- 使用最新稳定版 -->
            <configuration>
                <!-- 指定包含所有依赖的打包描述符 -->
                <descriptorRefs>
                    <descriptorRef>jar-with-dependencies</descriptorRef>
                </descriptorRefs>
                <!-- 配置CLI工具的主类,替换为你的实际主类路径 -->
                <archive>
                    <manifest>
                        <mainClass>com.mycompany.app.App</mainClass>
                    </manifest>
                </archive>
            </configuration>
            <!-- 绑定到package生命周期,执行install时自动打包 -->
            <executions>
                <execution>
                    <id>make-assembly</id>
                    <phase>package</phase>
                    <goals>
                        <goal>single</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

3. 重新打包并运行

执行以下命令完成打包:

mvn clean install

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

  • my-app-1.0-SNAPSHOT.jar:仅包含自身代码的JAR
  • my-app-1.0-SNAPSHOT-jar-with-dependencies.jar:包含所有依赖的可执行JAR

运行这个包含依赖的JAR即可:

java -jar ./target/my-app-1.0-SNAPSHOT-jar-with-dependencies.jar {INPUT}

常见错误排查

  • 如果仍未生效,检查mvn clean install的日志,确认assembly插件是否执行了single目标
  • 打开最终生成的JAR文件,检查是否包含org/apache/commons/codec/digest/MurmurHash3.class文件,验证依赖是否被正确打包

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 04:24:47