gpt4 book ai didi

即使依赖库存在,Java Jar ClassNotFoundException

转载 作者:行者123 更新时间:2023-12-02 03:42:41 25 4
gpt4 key购买 nike

我正在创建一个使用(非官方)Discord API、JDA 的(Minecraft)Forge 模组。我在 Eclipse IDE 中执行此操作。

在 IDE 中,我可以很好地添加带有依赖项的 JDA,并且代码中不会出现任何错误。然后,使用 gradlew 并编译它,当我尝试运行它(在 Minecraft 中)时出现错误。

我让几个人检查了我的 build.gradle 以确保它是正确的,而且确实如此。我现在假设这是一个一般的 Java 错误。

无论如何,错误:

    java.lang.NoClassDefFoundError: org/apache/http/nio/reactor/IOReactorException
at com.mashape.unirest.http.HttpClientHelper.prepareRequest(HttpClientHelper.java:151)
at com.mashape.unirest.http.HttpClientHelper.request(HttpClientHelper.java:131)
at com.mashape.unirest.request.BaseRequest.asString(BaseRequest.java:56)
at net.dv8tion.jda.requests.Requester.toObject(Requester.java:100)
at net.dv8tion.jda.requests.Requester.post(Requester.java:55)
at net.dv8tion.jda.entities.impl.JDAImpl.login(JDAImpl.java:152)
at net.dv8tion.jda.JDABuilder.buildAsync(JDABuilder.java:272)
at net.dv8tion.jda.JDABuilder.buildBlocking(JDABuilder.java:307)
at com.scarabcoder.ereijan.gui.GuiLogin.connect(GuiLogin.java:168)
at com.scarabcoder.ereijan.gui.GuiLogin.func_146284_a(GuiLogin.java:143)
at net.minecraft.client.gui.GuiScreen.func_73864_a(GuiScreen.java:466)
at com.scarabcoder.ereijan.gui.GuiLogin.func_73864_a(GuiLogin.java:128)
at net.minecraft.client.gui.GuiScreen.func_146274_d(GuiScreen.java:554)
at net.minecraft.client.gui.GuiScreen.func_146269_k(GuiScreen.java:523)
at net.minecraft.client.Minecraft.func_71407_l(Minecraft.java:1674)
at net.minecraft.client.Minecraft.func_71411_J(Minecraft.java:1024)
at net.minecraft.client.Minecraft.func_99999_d(Minecraft.java:349)
at net.minecraft.client.main.Main.main(SourceFile:124)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at net.minecraft.launchwrapper.Launch.launch(Launch.java:135)
at net.minecraft.launchwrapper.Launch.main(Launch.java:28)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at org.multimc.onesix.OneSixLauncher.launchWithMainClass(OneSixLauncher.java:310)
at org.multimc.onesix.OneSixLauncher.launch(OneSixLauncher.java:395)
at org.multimc.EntryPoint.listen(EntryPoint.java:170)
at org.multimc.EntryPoint.main(EntryPoint.java:54)
Caused by: java.lang.ClassNotFoundException: org.apache.http.nio.reactor.IOReactorException
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at net.minecraft.launchwrapper.LaunchClassLoader.findClass(LaunchClassLoader.java:106)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 32 more

在 jar 文件中: The path to the "missing" class (it exists)

有什么帮助吗?

最佳答案

在这种情况下,问题实际上出在 MinecraftForge 上,不一定是由于错误,而是由于 Forge 实现的保护。

Forge 可以完全控制加载 mod 的类,并且它会根据一组受限制的包路径专门检查其加载的每个类的包信息,以保护其自己的依赖项不会因加载类似的不同版本而意外被覆盖依赖性。在这种情况下,Forge 使用了一些 Apache 库,因此它阻止从 org.apache 加载类。包命名空间。

因此,当加载 mod 的类时,Forge 会注意到这些类来自 org.apache并选择专门不加载它们。这意味着当 Unirest JDA 使用的依赖项尝试使用它所依赖的 Apache 依赖项,但它们不存在,并且您会遇到 NoClassDefFoundError .

处理这个问题的最佳方法是正确地遮蔽您的依赖项。考虑到您使用的是 Forge,您很可能使用 Gradle。 MinecraftForge 实际上有一个关于如何正确遮蔽依赖项的指南 here .

关于即使依赖库存在,Java Jar ClassNotFoundException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36659980/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com