MongoDB驱动升级初始化报NoClassDefFoundError:SimpleMongoClient错误
异常产生原因
- 核心问题是Morphia版本与MongoDB驱动版本完全不兼容:你选用的Morphia 1.6.1是1.x系列的最终版本,底层适配的是MongoDB 3.x系列驱动,完全不支持4.x版本驱动。
- 报错提示找不到的
com.mongodb.client.internal.SimpleMongoClient是MongoDB 3.x驱动中的内部实现类,MongoDB 4.x版本对客户端内核做了全量重构,该类已经被彻底移除,相关内部类路径、构造逻辑全部变更,类加载时自然会抛出ClassNotFoundException。 - 你的客户端初始化代码完全基于3.x驱动的旧API编写:4.x驱动已经废弃了
MongoClientOptions配置类、以及直接new MongoClient(seeds, credential, options)的三参数构造方式,旧API在4.x版本中不存在,就算解决了类缺失问题也会报方法不存在的错误。
修复方案
结合你的Java 8运行环境限制,可落地的修复方式如下:
- 选用兼容版本组合(改动最小、稳定性最高):将MongoDB驱动替换为3.x系列的最终维护版本3.12.14,该版本兼容Java 8,与Morphia 1.6.1完全适配,你现有的初始化代码无需任何修改即可正常运行。
替换后的依赖配置如下:
<dependency> <groupId>org.mongodb</groupId> <artifactId>mongo-java-driver</artifactId> <version>3.12.14</version> </dependency> <dependency> <groupId>dev.morphia.morphia</groupId> <artifactId>core</artifactId> <version>1.6.1</version> </dependency>
注意:不要使用拆分的
mongodb-driver-sync4.x包,3.12.x版本直接引入mongo-java-driver全量包即可,避免出现依赖缺失。
- 若必须使用4.4.0版本MongoDB驱动,你需要先将项目运行环境升级到Java 11及以上,再升级Morphia到2.x系列,同时重写全部Mongo客户端初始化代码,使用4.x版本提供的
MongoClientSettings配置类、MongoClients.create()工厂方法构造客户端实例,该方案改动量极大,在当前Java 8环境下无法落地。
内容的提问来源于stack exchange,提问作者Ousmane MBINTE
相关产品推荐
相关产品推荐

