运行Jar包时抛出java.lang.NoSuchMethodError错误求助
问题分析与解决方案
错误原因
java.lang.NoSuchMethodError 本质是MongoDB驱动版本冲突:你同时引入了3.x(mongo-java-driver:3.12.10、mongodb-driver-async:3.12.10)和4.x(mongodb-driver-reactivestreams:4.5.1等)版本的依赖。4.x版本的MongoClientSettings新增了getLoggerSettings()方法,但3.x版本没有该方法,运行时JVM加载了旧版本的类,导致找不到方法抛出异常。
解决方案
1. 统一MongoDB驱动版本
MongoDB 4.x已经重构了驱动模块,mongo-java-driver是3.x时代的全量包,4.x拆分为独立的同步、异步、响应式驱动模块,无需再引入旧的全量包。直接移除所有3.x版本的MongoDB依赖,统一使用4.5.1版本:
修正后的build.gradle依赖配置:
dependencies { implementation group: 'org.mongodb', name: 'mongodb-driver-async', version: '4.5.1' implementation group: 'org.mongodb', name: 'mongodb-driver-reactivestreams', version: '4.5.1' implementation group: 'args4j', name: 'args4j', version: '2.33' implementation group: 'org.mongodb', name: 'bson', version: '4.5.1' implementation group: 'org.mongodb', name: 'mongodb-driver-sync', version: '4.5.1' implementation group: 'org.mongodb', name: 'mongodb-driver-core', version: '4.5.1' implementation 'commons-logging:commons-logging:1.1.3' }
2. 清理依赖缓存并重新构建
执行以下命令清理Gradle依赖缓存,避免旧版本依赖残留:
./gradlew clean build --refresh-dependencies
3. 验证依赖一致性
可以通过Gradle的依赖报告命令,确认所有MongoDB相关依赖都是4.5.1版本:
./gradlew dependencies --configuration implementation
检查输出中所有org.mongodb开头的依赖,确保版本统一,没有3.x版本的依赖混入。
内容的提问来源于stack exchange,提问作者Anupama Kumari
相关产品推荐
相关产品推荐

