Eclipse Java非Maven/Gradle环境连接MongoDB失败求助
解决MongoDB Java驱动NoClassDefFoundError问题
你遇到的问题核心是依赖jar包版本冲突+组件版本不兼容,具体原因和解决方案如下:
问题根源
- 新旧驱动混用:你同时引入了2.x版本的
mongo-java-driver-2.9.1.jar和3.x版本的mongodb-driver-3.6.1.jar,这两个版本的API和内部实现差异极大,会直接导致类加载冲突。 - 核心依赖版本不匹配:MongoDB 3.x驱动的三个核心组件(
mongodb-driver、mongodb-driver-core、bson)必须保持版本完全一致。你用了mongodb-driver-3.6.1.jar,但搭配的是mongodb-driver-core-3.0.1.jar和bson-3.0.4.jar,版本差距太大,缺失了DBRefCodecProvider这类关键类。 - 冗余依赖干扰:你的代码里并没有用到
jsoup-1.11.2.jar和java-json.jar,这些冗余依赖可以直接移除,避免不必要的类加载干扰。
解决方案
第一步:清理并统一依赖jar包
删除以下冲突/冗余的jar包:
mongo-java-driver-2.9.1.jar(旧版驱动,与3.x完全不兼容)bson-3.0.4.jar(版本与driver不匹配)mongodb-driver-core-3.0.1.jar(版本与driver不匹配)jsoup-1.11.2.jar(未在代码中使用)java-json.jar(未在代码中使用)
只保留版本统一为3.6.1的三个核心jar包:
mongodb-driver-3.6.1.jarmongodb-driver-core-3.6.1.jarbson-3.6.1.jar
第二步:修正代码(适配3.x新API)
你的代码混用了旧版的DB、DBCollection、DBObjectAPI和新版的MongoClient,3.x驱动推荐使用更简洁高效的MongoDatabase和MongoCollection<Document>API,修正后的代码如下:
import org.bson.Document; import com.mongodb.MongoClient; import com.mongodb.client.MongoCollection; import com.mongodb.client.MongoDatabase; public class Main { public static void main(String[] args) { try { // 连接本地MongoDB实例 MongoClient mongoClient = new MongoClient("localhost", 27017); // 获取数据库(3.x新API) MongoDatabase database = mongoClient.getDatabase("test"); // 获取集合(3.x新API) MongoCollection<Document> collection = database.getCollection("myCol"); // 创建文档并插入 Document document = new Document("name", "mkyong") .append("age", 30); collection.insertOne(document); System.out.println("数据插入成功!"); } catch(Exception ex) { System.out.println("错误信息:" + ex.getMessage()); ex.printStackTrace(); // 打印完整堆栈,方便排查深层问题 } } }
补充说明
- MongoDB 3.4.10和3.6.x版本的Java驱动完全兼容,不用担心版本适配问题。
- 如果你坚持使用旧版
DB类API,需要移除所有3.x驱动jar包,只保留mongo-java-driver-2.9.1.jar,但不推荐这么做——旧版API已被废弃,功能和性能都远不如新版。
内容的提问来源于stack exchange,提问作者Олга Димитровска
相关产品推荐
相关产品推荐

