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

java.lang.NoClassDefFoundError when using MongoDB driver

我正在尝试使用 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

我看了一个答案 (),它向我强调我需要其他 jar,我已经下载了它们,但我仍然收到此错误。

我正在使用 Eclipse 并将三个 jar 添加到构建路径,通过右键单击项目然后跟随 Build Path -> Configure build path -> Java build path -> libraries -> add external JARs 浏览菜单。

这样做正确吗?作为 well/instead,我还应该做些什么吗?

如果从 servlet 调用数据库,则必须确保 mongodb jar 已导出到服务器。

检查您如何在本地服务器上部署您的应用程序,并确保 jars 在那里。

您有 java.lang.NoClassDefFoundError - 这意味着您的 class 在 运行 时间内(而不是在 build/compile 时间内)丢失。所以你应该打开项目的 "Run Configurations" 对话框(项目上下文菜单 -> "Run As" -> "Run Configurations...")并确保你有 bson-xxx.jar,[=18= .jar 和 mongodb-driver-core-xxx.jar 以某种方式列在类路径选项卡中。是的,就像 Xavier Bouclet 所说 - 如果你 运行 它在应用程序服务器下 - 这个 jars 应该添加到你服务器的 class 路径。

我的 Mule 4 项目遇到了类似的问题。

Failed to invoke lifecycle phase "initialise" on object:

那是指向:

java.lang.NoClassDefFoundError: com/mongodb/MongoClientURI

所以我必须在插件部分更新 POM 文件(mule-mave-plug,我知道它在 java 项目中会是什么):

<sharedLibraries>
    <sharedLibrary>
        <groupId>org.mongodb</groupId>
        <artifactId>mongodb-driver-legacy</artifactId>
    </sharedLibrary>
</sharedLibraries>