使用 MongoDB 驱动程序时出现 java.lang.NoClassDefFoundError

标签 java eclipse mongodb noclassdeffounderror mlab

我正在尝试使用 servlet 上的 Java 驱动程序连接到托管在 mlab 上的 MongoDB 数据库。

import org.bson.Document; 
import com.mongodb.MongoClient;
import com.mongodb.MongoClientURI;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;

public class MongoConnection {

    protected void connectToMongo(String loc){

        String dbName = "readings";
        String collection = "data";

        MongoClientURI uri = new MongoClientURI("mongodb://user:pass@ds143109.mlab.com:43109/readings");
        MongoClient client = new MongoClient(uri);
        MongoDatabase db = client.getDatabase(dbName);

        MongoCollection<Document> readings = db.getCollection(collection);

        Document doc = Document.parse(loc);

        readings.insertOne(doc);

        client.close();
    }
}

问题是我收到以下错误: java.lang.NoClassDefFoundError: com/mongodb/MongoClientURI

我看了一个答案 ( How to resolve ClassNotFoundException: com.mongodb.connection.BufferProvider? ),它向我强调我需要其他 jar,我已经下载了它们,但我仍然收到此错误。

我正在使用 Eclipse 并将三个 jar 添加到构建路径,通过右键单击项目然后按照 Build Path -> Configure build path -> Java build path -> libraries -> add 在菜单中导航外部 JAR

这是正确的做法吗?还有其他我应该做的事情吗?

最佳答案

您有 java.lang.NoClassDefFoundError - 这意味着您的类在运行时(而不是在构建/编译期间)丢失。所以你应该打开项目的“运行配置”对话框(项目上下文菜单 ->“运行方式” ->“运行配置...”)并确保你有 bson-xxx.jar,mongodb-driver-xxx。 jar 和 mongodb-driver-core-xxx.jar 以某种方式列在类路径选项卡中。是的,就像 Xavier Bouclet 所说的那样 - 如果您在应用程序服务器下运行它 - 这个 jars 应该添加到您服务器的类路径中。

关于使用 MongoDB 驱动程序时出现 java.lang.NoClassDefFoundError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42122018/

相关文章:

Java watcher - 如何知道文件是否已完全创建

java - 如何找到字符串中的最后一个字符?

python - pep8- 视觉缩进缩进下的续行

java - eclipse 的检查功能像个傻瓜一样欺骗我,为什么调试时看起来那么棘手?

java - 如何从命令行在 JBoss WildFly 上构建、部署和运行 Java 应用程序?

javascript - 在 mongodb 中使用 $gt

java - 尝试将一个方法从一个类引用到另一个类 = NullPointerException

Java&Consul无法通过有效的服务名称获取ServiceInstance的有效实例

mongodb - 如何在 java/scala 中使用 inc 运算符创建 Decimal128 字段

mongodb - 使用 Spring Data Mongodb,是否可以在不拉取和迭代整个集合的情况下获得字段的最大值?