我正在尝试使用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
来浏览菜单。
这是正确的方法吗?还有其他我应该做的事情吗?
答案 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>