ClassDefNoFound, хотя банка, от которого я зависим, находится в моей банке - PullRequest
0 голосов
/ 31 марта 2020

Я пишу аддон LabyMod для создания магазина-бота для клиентов Minecraft.

Мне это удалось, по крайней мере, во время моей разработки в затмении. Теперь я хотел опубликовать его sh, и для этого LabyMod предоставляет возможность использовать gradle для упаковки всего, что относится к аддону в аддоне jar, которое затем можно просто перетащить в «аддоны» - Папка.

Однако, когда я делаю это, плагин не появляется в обзоре плагинов, и я обнаружил, что при загрузке плагина произошла ошибка (Class def not found). Я использую okhttp3 для отправки некоторых веб-запросов на мой сервер верификации, поэтому я просто добавил его в eclipse как зависимый jar, но они не были включены, когда gradle собрал jar. Поэтому я не очень удивился этому и искал возможность напрямую добавить свои зависимости в банку.

Я обнаружил в комментариях предопределенного build.gradle просто поместить все файлы в предопределенный "libs" - папка, которая казалась хорошей. Вот в чем проблема: хотя банки, безусловно, являются частью банки, класс-поиск не обнаружен. Вот что я имею в виду.

JD- GUI говорит о моей банке: Contents of the jar

Итак, банки, безусловно, есть, и jd- gui их также можно найти в коде, поскольку вы можете щелкнуть по импорту и попасть в место, где okhttp3 определил импортированный класс.

Однако при попытке загрузить аддон я получаю сообщение об ошибке:

catching
java.lang.NoClassDefFoundError: okhttp3/OkHttpClient$Builder
    at borg.locutus.grieferbot.utils.NetworkUtilities.sendGet(NetworkUtilities.java:70)
    at borg.locutus.grieferbot.utils.NetworkUtilities.getPermissionLevelOfPlayer(NetworkUtilities.java:51)
    at borg.locutus.grieferbot.GrieferBOTAddon.initPermissionLevel(GrieferBOTAddon.java:50)
    at borg.locutus.grieferbot.GrieferBOTAddon.onEnable(GrieferBOTAddon.java:43)
    at net.labymod.addon.AddonLoader.enableAddon(AddonLoader.java:349)
    at net.labymod.addon.AddonLoader.enableAddons(AddonLoader.java:309)
    at net.labymod.main.LabyMod.init(LabyMod.java:256)
    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:498)
    at net.minecraftforge.fml.common.FMLModContainer.handleModStateEvent(FMLModContainer.java:560)
    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:498)
    at com.google.common.eventbus.EventSubscriber.handleEvent(EventSubscriber.java:74)
    at com.google.common.eventbus.SynchronizedEventSubscriber.handleEvent(SynchronizedEventSubscriber.java:47)
    at com.google.common.eventbus.EventBus.dispatch(EventBus.java:322)
    at com.google.common.eventbus.EventBus.dispatchQueuedEvents(EventBus.java:304)
    at com.google.common.eventbus.EventBus.post(EventBus.java:275)
    at net.minecraftforge.fml.common.LoadController.sendEventToModContainer(LoadController.java:211)
    at net.minecraftforge.fml.common.LoadController.propogateStateMessage(LoadController.java:189)
    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:498)
    at com.google.common.eventbus.EventSubscriber.handleEvent(EventSubscriber.java:74)
    at com.google.common.eventbus.SynchronizedEventSubscriber.handleEvent(SynchronizedEventSubscriber.java:47)
    at com.google.common.eventbus.EventBus.dispatch(EventBus.java:322)
    at com.google.common.eventbus.EventBus.dispatchQueuedEvents(EventBus.java:304)
    at com.google.common.eventbus.EventBus.post(EventBus.java:275)
    at net.minecraftforge.fml.common.LoadController.distributeStateMessage(LoadController.java:118)
    at net.minecraftforge.fml.common.Loader.initializeMods(Loader.java:737)
    at net.minecraftforge.fml.client.FMLClientHandler.finishMinecraftLoading(FMLClientHandler.java:310)
    at net.minecraft.client.Minecraft.func_71384_a(Minecraft.java:495)
    at net.minecraft.client.Minecraft.func_99999_d(Minecraft.java:329)
    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:498)
    at net.minecraft.launchwrapper.Launch.launch(Launch.java:135)
    at net.minecraft.launchwrapper.Launch.main(Launch.java:28)
Caused by: java.lang.ClassNotFoundException: okhttp3.OkHttpClient$Builder
    at net.minecraft.launchwrapper.LaunchClassLoader.findClass(LaunchClassLoader.java:191)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 44 more
Caused by: java.lang.NullPointerException
    at net.minecraft.launchwrapper.LaunchClassLoader.findClass(LaunchClassLoader.java:182)
    ... 46 more

Как я могу заставить мою банку найти недостающие зависимости?

1 Ответ

0 голосов
/ 15 апреля 2020

Вы не можете просто поместить банки зависимостей в основной. Вы должны затенять зависимости в них.

...