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

Kinesis转S3应用Jar运行报NoClassDefFoundError求助

解决KCL依赖缺失导致的NoClassDefFoundError问题

从你的错误堆栈和pom.xml配置来看,问题根源很清晰:你导出的可执行Jar没有包含Kinesis Client Library(KCL)及其他依赖的类文件。本地Eclipse运行时会自动加载项目依赖库,但普通Jar导出默认不会将依赖类打包进去,所以运行时找不到IRecordProcessorFactory这个核心类。

下面给你两个直接可行的解决方案:

方案一:用Maven Shade插件打包含所有依赖的可执行Jar

这个插件会把你的项目代码和所有依赖类合并到单个Jar里,方便直接运行。你需要在pom.xml的<build><plugins>节点下添加以下配置:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-shade-plugin</artifactId>
    <version>3.4.1</version>
    <executions>
        <execution>
            <phase>package</phase>
            <goals>
                <goal>shade</goal>
            </goals>
            <configuration>
                <transformers>
                    <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                        <!-- 指定你的S3写入应用主类 -->
                        <mainClass>samples.s3.S3Executor</mainClass>
                    </transformer>
                </transformers>
            </configuration>
        </execution>
    </executions>
</plugin>

配置完成后,执行mvn clean package命令,target目录下会生成一个带-shaded后缀的Jar文件,直接用java -jar your-jar-name-shaded.jar就能正常运行。

方案二:利用已配置的Appassembler插件生成启动脚本

你的pom.xml里已经配置了appassembler-maven-plugin,这个插件会帮你生成包含依赖库和启动脚本的完整目录结构。执行mvn clean package后,去target/appassembler/bin目录下找到s3-sample启动脚本(对应你的S3Executor主类),直接运行这个脚本即可——它会自动处理依赖路径,不用你手动操心Jar的依赖问题。

额外提醒

  • 确认amazon-kinesis-connectors和aws-java-sdk的依赖范围是默认的compile(你当前pom已经满足,无需修改),这样打包工具才会把这些核心依赖包含进去。
  • 如果用Shade插件,主类一定要和你实际运行的类对应,比如你要运行S3写入逻辑,就指定samples.s3.S3Executor。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:23:06