求助:出现java.lang.ClassNotFoundException: com.amazonaws.services.s3.model.S3ObjectInputStream错误
解决java.lang.ClassNotFoundException: com.amazonaws.services.s3.model.S3ObjectInputStream问题
嘿,这个报错其实很好排查——本质就是你的项目里缺少了AWS S3 SDK相关的依赖包,导致Tomcat的类加载器找不到这个类。下面给你几种靠谱的解决办法:
1. 用构建工具添加依赖(推荐)
如果你的项目用Maven或Gradle管理依赖,直接添加对应SDK的依赖就行,注意区分AWS SDK的版本:
Maven(SDK v1)
在pom.xml里加入这段依赖,记得把版本换成最新稳定版:
<dependency> <groupId>com.amazonaws</groupId> <artifactId>aws-java-sdk-s3</artifactId> <version>1.12.500</version> </dependency>
Maven(SDK v2)
如果用的是AWS SDK v2,类路径和依赖都不一样,对应的类是software.amazon.awssdk.services.s3.model.S3ObjectInputStream,依赖如下:
<dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>s3</artifactId> <version>2.20.150</version> </dependency>
Gradle
同理,Gradle用户可以在build.gradle里添加:
// SDK v1 implementation 'com.amazonaws:aws-java-sdk-s3:1.12.500' // SDK v2 implementation 'software.amazon.awssdk:s3:2.20.150'
2. 手动添加JAR包(无构建工具时)
如果你的项目没用到构建工具,那就下载对应版本的aws-java-sdk-s3 JAR包,以及它依赖的核心包(比如aws-java-sdk-core),然后把这些JAR放到项目的WEB-INF/lib目录下——因为你是Tomcat环境,这个目录下的包会被Web应用的类加载器加载。
额外注意事项
- 排查依赖冲突:如果已经加了依赖还是报错,可能是项目里存在多个版本的AWS SDK,导致类加载混乱。可以用Maven的
mvn dependency:tree命令或者Gradle的./gradlew dependencies任务查看依赖树,排除掉冲突的旧版本。 - Tomcat类加载隔离:别把依赖包放到Tomcat的全局
lib目录下,Web应用的类加载器优先加载自己WEB-INF/lib里的包,全局目录的包可能会被隔离,导致找不到类。
内容的提问来源于stack exchange,提问作者Rafael Oliveira
相关产品推荐
相关产品推荐

