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

时间:2017-02-08 19:30:26

标签: 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?),向我突出显示我需要其他罐子,我已经下载了它们但是我仍然收到此错误。

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

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

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

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

检查您在本地服务器上部署应用的方式dans确保罐子在那里。

答案 2 :(得分:0)

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

Failed to invoke lifecycle phase "initialise" on object:

那是指:

java.lang.NoClassDefFoundError: com/mongodb/MongoClientURI

所以我不得不在插件部分更新 POM 文件(mule-mave-plug,idk 在 java 项目中会是什么):

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