Java NoSuchMethodError求助:第三方库调用同名包错误
解决MongoDB驱动版本冲突导致的NoSuchMethodError
问题根源
你碰到的NoSuchMethodError是因为项目里同时引入了不兼容的MongoDB驱动版本:
org.mongodb:mongo-java-driver:3.12.5(旧版全量驱动包,本身包含mongodb-driver-core的内容)org.mongodb:mongodb-driver-core:4.4.2(新版核心驱动包)
类加载器优先加载了高版本的ConnectionPoolSettings$Builder,但低版本的MongoClientOptions(来自3.12.5的全量包)尝试调用的maxWaitQueueSize(int)方法在高版本类中已被移除或签名变更,直接导致方法找不到。
解决步骤
1. 统一MongoDB驱动版本
MongoDB驱动包版本必须保持一致,建议选一个稳定版本(比如4.4.x系列),移除冲突依赖:
- 若用Gradle,修改
build.gradle:// 移除旧的全量驱动包 // implementation 'org.mongodb:mongo-java-driver:3.12.5' // 统一使用拆分后的驱动包,版本保持一致 implementation 'org.mongodb:mongodb-driver-core:4.4.2' implementation 'org.mongodb:mongodb-driver-sync:4.4.2' // 需同步客户端时添加 - 若用Maven,修改
pom.xml:<!-- 移除旧的全量驱动包 --> <!-- <dependency> <groupId>org.mongodb</groupId> <artifactId>mongo-java-driver</artifactId> <version>3.12.5</version> </dependency> --> <!-- 统一使用拆分后的驱动包 --> <dependency> <groupId>org.mongodb</groupId> <artifactId>mongodb-driver-core</artifactId> <version>4.4.2</version> </dependency> <dependency> <groupId>org.mongodb</groupId> <artifactId>mongodb-driver-sync</artifactId> <version>4.4.2</version> </dependency>
2. 排除传递依赖冲突
如果项目里其他第三方依赖间接引入了旧版mongo-java-driver,需要手动排除:
- Gradle示例:
implementation('第三方依赖的groupId:第三方依赖的artifactId:版本号') { exclude group: 'org.mongodb', module: 'mongo-java-driver' } - Maven示例:
<dependency> <groupId>第三方依赖的groupId</groupId> <artifactId>第三方依赖的artifactId</artifactId> <version>版本号</version> <exclusions> <exclusion> <groupId>org.mongodb</groupId> <artifactId>mongo-java-driver</artifactId> </exclusion> </exclusions> </dependency>
3. 验证类路径一致性
执行依赖分析命令,确认类路径中只有统一版本的MongoDB驱动:
- Gradle:
./gradlew dependencies,搜索org.mongodb相关依赖,确保版本统一 - Maven:
mvn dependency:tree,检查MongoDB驱动的版本无冲突
额外提示
从MongoDB驱动3.11版本开始,官方推荐使用拆分后的驱动包(mongodb-driver-core、mongodb-driver-sync等),不再建议使用全量的mongo-java-driver包;升级驱动后,注意检查代码中是否有旧版API调用(比如MongoClient初始化方式可能有变更)。
内容的提问来源于stack exchange,提问作者nairsirk
相关产品推荐
相关产品推荐

