【问题标题】:MongoDB java error java.lang.NoClassDefFoundError: com/mongodb/MongoClientMongoDB java 错误 java.lang.NoClassDefFoundError: com/mongodb/MongoClient
【发布时间】:2018-11-10 05:49:38
【问题描述】:

我正在尝试在 mongodb 和 java 之间建立连接,但出现错误:

java.lang.NoClassDefFoundError: com/mongodb/MongoClient

我知道这个问题之前被问过多次,但我尝试过的都没有工作

1 添加到类路径(另外,在这篇文章中,他们正在谈论服务器类路径。我不知道那是什么,如果这是我必须在我正在运行的服务器上做的事情,那不是一个选项)

2 我已经添加了所有需要的 jar 文件(bson.jar、mongodb-driver-core-jar 和 mongodb-java.jar)所有版本 3.6.3

我在 maven 项目和 java 项目中都尝试过这两种方法。

导出后打开 jar 文件时,在其 .classpath 文件中列出了 mongo 的 jar 文件。 我该如何解决我的问题?

PS:我注意到 jar 文件不包含依赖 jar 文件。 jar 文件如何在文件不存在的另一个系统上工作?另外,不确定是否重要,但这是 Minecraft 服务器的插件

编辑: 这是 pom.xml 依赖项:

<dependencies>
    <dependency>
        <groupId>org.mongodb</groupId>
        <artifactId>mongodb-driver</artifactId>
        <version>3.6.3</version>
    </dependency>
</dependencies>

这应该已经包括 bson 和 core jars,但是不起作用。我手动添加它们以防万一。 (构建路径 -> 配置构建路径 -> 添加外部 jar)使用 Eclipse。我已经以相同的方式添加了其他 jar 文件并且它们确实有效,所以我不知道为什么 mongo 不会

【问题讨论】:

  • 之前肯定被问过很多次,而且通常会回到同样的问题。你是如何实际安装这些罐子的?我在这个问题上看到了一个 Maven 标签,但你真的使用过它吗?如果您这样做了,那么您应该能够显示您拥有的 pom.xml,并告诉我们您正在使用哪个 IDE(如果有)。大多数 IDE 会为您处理很多此类问题,常见问题通常是手动下载和手动提取文件,而不是让包管理器为您完成。一旦您开始谈论“缺少依赖项”,这通常表明您是手动完成的
  • 请在您的问题上使用edit link 添加详细信息。不要尝试将它们添加到 cmets 中。
  • 我现在编辑了帖子,没想到编辑帖子。

标签: java mongodb maven plugins noclassdeffounderror


【解决方案1】:

我想你使用 .classpath 文件中的 eclipse。

您很可能混合了 java 项目的 maven 和非 maven 设置。

如果您不使用 maven(在 eclipse 中没有 pom.xml / 禁用 Maven 性质),您手动添加到类路径的依赖项很可能会起作用。

如果你想创建一个 maven 项目,像你一样定义 mongodb-driver 就足够了,传递依赖也将被使用,maven 将管理它们。

我认为在后一种情况下,您在类路径中添加任何 jar/依赖项都是徒劳的,您必须使用 pom.xml 来定义您使用的 jars/依赖项。

您必须在 Eclipse 中检查是否启用了 maven 特性:在项目上应该有一个“M”表示该项目是一个 maven 项目。如果该符号不存在,请使用项目的上下文菜单“配置”->“转换为 Maven 项目”进行转换。您应该在 Eclipse 中打开“问题”视图并检查与您的项目相关的任何问题。它会告诉你你做错了什么。

要回答如何使项目可移植的问题: 如果你想走最安全的路,最好的办法是使用 maven 程序集插件构建一个 fat jar - 在这种情况下,maven 会将所有内容打包到一个巨大的 jar 文件中。

【讨论】:

  • 我创建了一个全新的 maven 项目,并且只复制了 3 个 .java 文件。而不是手动添加我需要的其他罐子,这些罐子现在在 pom.xml 中。还是不行。我检查了问题视图,没有错误。当试图在eclipse中调试时,eclipse说它找不到main方法。它在寻找 main() 方法吗?因为这在我的插件中不存在。关于可移植性,我尝试添加 maven 插件,但不知道如何导出 fat jar,所以有人说我可以导出为 Runnable Jar,但由于它在 Mincraft 服务器上运行,由于某种原因不起作用。跨度>
  • 您在谈论两种不同的使用方式:您想在本地运行(测试)它并在 Minecraft 服务器上作为插件运行它。如果你想测试它,你有两个选择:要么添加一个带有 main 方法的新类,你可以在其中实例化和调用你的功能,或者你必须创建 junit 测试,你可以在其中做同样的事情。如果没有 main 方法,您的代码将无法单独运行。另一种选择是在“生产”中对其进行测试(将其放到 Minecraft 服务器上,看看它是如何工作的)。或者,如果您有一个测试 Minecraft 服务器,您可以在那里进行。
  • 我已经在本地托管的 minecraft 服务器上对其进行了测试。那是我得到错误 nodefclassfound 的地方。
  • 好的,比我们更进一步。您必须制作一个胖罐子才能使其正常工作(使用 maven-assembly-plugin),或者您必须弄清楚如何为 Minecraft 插件提供多个罐子。
  • 我设法制作了一个胖 jar 文件。我不确定它是否有效,因为现在我遇到了另一个问题。根据服务器,插件启动所需的 plugin.yml 文件丢失。该文件存在于项目中。也许它不包含在胖罐构建中?如果是这样,我该如何添加它?还是只是由于某种原因服务器无法读取?如果你不知道如何解决这个问题,我可能会在 spigotmc.org 上问这个问题。无论如何感谢您的帮助!
猜你喜欢
  • 2013-06-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-10
  • 2021-12-31
  • 1970-01-01
相关资源
最近更新 更多