【问题标题】:Discord bot JDA doesn't work, caused by java.lang.ClassNotFoundExceptionDiscord bot JDA 不起作用,由 java.lang.ClassNotFoundException 引起
【发布时间】:2021-02-28 01:04:36
【问题描述】:

我正在尝试使用 Java Discord API 构建一个不和谐机器人,但是当我运行此代码 sn-p 时:

public static void main(String[] args) throws LoginException {
    JDABuilder builder = JDABuilder.createDefault(token);
    builder.setActivity(Activity.watching("boop"));
    builder.build();
}

它抛出这个异常:

Exception in thread "main" java.lang.NoClassDefFoundError: gnu/trove/map/TLongObjectMap
at net.dv8tion.jda@4.2.0_216/net.dv8tion.jda.api.entities.Activity.watching(Activity.java:204)
at rambot/rambot.discord.MainApp.main(MainApp.java:14)Caused by: java.lang.ClassNotFoundException: gnu.trove.map.TLongObjectMap
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:606)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:168)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
... 2 more

为什么会抛出这个问题,我该如何解决?

【问题讨论】:

  • 您使用的是什么版本的 JDA?
  • 我正在使用 JDA-4.2.0_217
  • 有趣。 line 204 in Activity.java 上没有代码,TLongObjectMap 也没有出现在课堂上的任何地方。您是否尝试将Trove4J 添加到您的pom.xml/build.gradle/.classpath?我假设您使用的是 linux 机器?
  • 好吧,我找到了一个解决方案^^',通过转到[JDA github] (github.com/DV8FromTheWorld/JDA/wiki/…),如果代码不起作用,那是因为我没有使用-withDependencies。 jar 现在我没有更多问题了,非常感谢您阅读我的帖子,在寻求帮助之前我应该​​多询问一下
  • 将来,您可能希望使用 gradle 或 maven 等构建工具。它们会自动为您实现所有这些依赖项。

标签: java classnotfoundexception discord-jda


【解决方案1】:

对于看到此内容但似乎无法阅读 cmets 或自己弄清楚的人。 On the JDA wiki, there is an explanation as well。感谢@BENRABAH Brahim Zaky

启动时出现 NoClassDefFoundError 或 ClassNotFoundException
像 java.lang.NoClassDefFoundError: net/dv8tion/jda/api/JDABuilder 或类似的错误意味着您没有在存档中包含您的依赖项或传递依赖项。

Gradle (build.gradle)
使用 gradle 可以通过使用 shadow 插件并使用 shadowJar 构建您的 jar 来解决此问题。然后该 jar 将出现在 build/libs 目录中,名称类似于 example-1.0-all.jar

Maven (pom.xml)
使用 maven,您需要 pom 中的 shade 插件来将依赖项添加到您的包任务中。你可以看到在这个例子 pom.xml 中应用了 shade 插件

Jar(无构建工具)
您需要使用-withDependencies.jar 而不是普通的。

首选方法取决于每个程序员,但我建议使用 gradle 或 maven。因为他们完成了从编译 Jar 到添加依赖项的所有工作。

【讨论】:

    猜你喜欢
    • 2020-08-07
    • 2017-12-22
    • 2021-06-03
    • 2020-08-16
    • 2021-02-22
    • 2023-01-05
    • 2020-11-13
    • 2021-10-22
    • 1970-01-01
    相关资源
    最近更新 更多