Windows Kotlin项目调用ClasspathPropertiesFileCredentialsProvider报ClassNotFoundException
问题根因
你遇到的java.lang.ClassNotFoundException: com.amazonaws.auth.ClasspathPropertiesFileCredentialsProvider错误本质是运行时环境缺失AWS SDK核心依赖,编译阶段能通过是因为Gradle的implementation依赖仅保证编译期可见,如果你直接运行打包后的未携带依赖的jar包、或者运行配置没有正确关联依赖库,就会出现运行时类找不到的问题,你之前的Swing项目应该是已经配置了依赖打包逻辑,所以可以正常运行。
解决方案
场景1:IDE本地运行时抛出错误
- 检查你当前项目的运行配置,确认
Include dependencies with 'Implementation' scope选项已勾选(IDEA的配置路径:运行/调试配置 -> 修改选项 -> 从模块类路径包含依赖项) - 确认
AWSCredentials.properties文件放在src/main/resources目录下,确保编译后会被打包到classpath根目录
场景2:打包成独立jar运行时抛出错误
你需要给Gradle配置fat jar(可执行带依赖的jar)打包逻辑,在build.gradle中添加如下配置:
jar { manifest { // 替换为你自己的主类全路径,Kotlin主类默认后缀为Kt attributes 'Main-Class': 'com.example.YourMainClassKt' } // 把所有依赖的包都打进jar from { configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) } } // 排除重复的签名文件避免打包冲突 exclude 'META-INF/*.RSA', 'META-INF/*.SF', 'META-INF/*.DSA' duplicatesStrategy = DuplicatesStrategy.EXCLUDE }
配置完成后重新执行gradle build,生成的jar包就包含了所有AWS SDK的依赖类,运行时不会再报类找不到的错误。
可选校验方法
如果你想确认依赖是否正确携带,可以解压生成的jar包,检查是否存在com/amazonaws/auth/ClasspathPropertiesFileCredentialsProvider.class文件,存在则说明依赖打包成功。
内容的提问来源于stack exchange,提问作者matteoh
相关产品推荐
相关产品推荐

