Помогите NoClassDefFoundError

pro100koder

Активный участник
Пользователь
Баллы
76
В общем, периодически возникает такая ошибочка красивая:
Код:
[22:56:59] [Server thread/ERROR]: Could not pass event EntityDamageByEntityEvent to mobwars v1337
org.bukkit.event.EventException: null
    at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:306) ~[spigot.jar:git-Spigot-596221b-9a1fc1e]
    at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62) ~[spigot.jar:git-Spigot-596221b-9a1fc1e]
    at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:499) [spigot.jar:git-Spigot-596221b-9a1fc1e]
    at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:484) [spigot.jar:git-Spigot-596221b-9a1fc1e]
    at org.bukkit.craftbukkit.v1_12_R1.event.CraftEventFactory.callEvent(CraftEventFactory.java:92) [spigot.jar:git-Spigot-596221b-9a1fc1e]
    at org.bukkit.craftbukkit.v1_12_R1.event.CraftEventFactory.callEntityDamageEvent(CraftEventFactory.java:579) [spigot.jar:git-Spigot-596221b-9a1fc1e]
    at org.bukkit.craftbukkit.v1_12_R1.event.CraftEventFactory.handleEntityDamageEvent(CraftEventFactory.java:482) [spigot.jar:git-Spigot-596221b-9a1fc1e]
    at org.bukkit.craftbukkit.v1_12_R1.event.CraftEventFactory.handleLivingEntityDamageEvent(CraftEventFactory.java:611) [spigot.jar:git-Spigot-596221b-9a1fc1e]
    at net.minecraft.server.v1_12_R1.EntityLiving.damageEntity0(EntityLiving.java:1339) [spigot.jar:git-Spigot-596221b-9a1fc1e]
    at net.minecraft.server.v1_12_R1.EntityLiving.damageEntity(EntityLiving.java:863) [spigot.jar:git-Spigot-596221b-9a1fc1e]
    at net.minecraft.server.v1_12_R1.EntityMonster.damageEntity(EntityMonster.java:44) [spigot.jar:git-Spigot-596221b-9a1fc1e]
    at net.minecraft.server.v1_12_R1.EntityMonster.B(EntityMonster.java:68) [spigot.jar:git-Spigot-596221b-9a1fc1e]
    at net.minecraft.server.v1_12_R1.EntityCaveSpider.B(SourceFile:38) [spigot.jar:git-Spigot-596221b-9a1fc1e]
    at net.minecraft.server.v1_12_R1.PathfinderGoalMeleeAttack.a(SourceFile:127) [spigot.jar:git-Spigot-596221b-9a1fc1e]
    at net.minecraft.server.v1_12_R1.PathfinderGoalMeleeAttack.e(SourceFile:119) [spigot.jar:git-Spigot-596221b-9a1fc1e]
    at net.minecraft.server.v1_12_R1.PathfinderGoalSelector.a(SourceFile:129) [spigot.jar:git-Spigot-596221b-9a1fc1e]
    at net.minecraft.server.v1_12_R1.EntityInsentient.doTick(EntityInsentient.java:664) [spigot.jar:git-Spigot-596221b-9a1fc1e]
    at net.minecraft.server.v1_12_R1.EntityLiving.n(EntityLiving.java:2090) [spigot.jar:git-Spigot-596221b-9a1fc1e]
    at net.minecraft.server.v1_12_R1.EntityInsentient.n(EntityInsentient.java:507) [spigot.jar:git-Spigot-596221b-9a1fc1e]
    at net.minecraft.server.v1_12_R1.EntityMonster.n(EntityMonster.java:24) [spigot.jar:git-Spigot-596221b-9a1fc1e]
    at net.minecraft.server.v1_12_R1.EntityLiving.B_(EntityLiving.java:1939) [spigot.jar:git-Spigot-596221b-9a1fc1e]
    at net.minecraft.server.v1_12_R1.EntityInsentient.B_(EntityInsentient.java:246) [spigot.jar:git-Spigot-596221b-9a1fc1e]
    at net.minecraft.server.v1_12_R1.EntityMonster.B_(EntityMonster.java:28) [spigot.jar:git-Spigot-596221b-9a1fc1e]
    at net.minecraft.server.v1_12_R1.EntitySpider.B_(EntitySpider.java:45) [spigot.jar:git-Spigot-596221b-9a1fc1e]
    at net.minecraft.server.v1_12_R1.World.entityJoinedWorld(World.java:1640) [spigot.jar:git-Spigot-596221b-9a1fc1e]
    at net.minecraft.server.v1_12_R1.World.h(World.java:1610) [spigot.jar:git-Spigot-596221b-9a1fc1e]
    at net.minecraft.server.v1_12_R1.World.tickEntities(World.java:1436) [spigot.jar:git-Spigot-596221b-9a1fc1e]
    at net.minecraft.server.v1_12_R1.WorldServer.tickEntities(WorldServer.java:665) [spigot.jar:git-Spigot-596221b-9a1fc1e]
    at net.minecraft.server.v1_12_R1.MinecraftServer.D(MinecraftServer.java:814) [spigot.jar:git-Spigot-596221b-9a1fc1e]
    at net.minecraft.server.v1_12_R1.DedicatedServer.D(DedicatedServer.java:405) [spigot.jar:git-Spigot-596221b-9a1fc1e]
    at net.minecraft.server.v1_12_R1.MinecraftServer.C(MinecraftServer.java:678) [spigot.jar:git-Spigot-596221b-9a1fc1e]
    at net.minecraft.server.v1_12_R1.MinecraftServer.run(MinecraftServer.java:576) [spigot.jar:git-Spigot-596221b-9a1fc1e]
    at java.lang.Thread.run(Unknown Source) [?:1.8.0_191]
Caused by: java.lang.NoClassDefFoundError: objMobwars/poisonedWeb
    at mobwars.Events.onHurt(Events.java:170) ~[?:?]
    at sun.reflect.GeneratedMethodAccessor350.invoke(Unknown Source) ~[?:?]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_191]
    at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_191]
    at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:302) ~[spigot.jar:git-Spigot-596221b-9a1fc1e]
    ... 32 more
Лечится банальным /reload-ом. Но эта проблема встречается постоянно во многих других моих плагинах...
Строка 170 ссылается на объект (класс) poisonedWeb, который, похоже, не найден.
Код:
if(new Random().nextDouble()<=dm.ultra.get("chance")/100.00)main.webs.add(new poisonedWeb(dm.ultra.get("dur"),dm.ultra.get("dam"), dm.owner, en.getLocation()));
А вот и тот самый класс (это не единственный забагованный класс)
Код:
package objMobwars;

import org.bukkit.Location;
import org.bukkit.Material;

public class poisonedWeb {
    public int time;
    public int dps;
    public String owner;
    public Location loc;
    public poisonedWeb(int Time, int DPS, String Owner, Location Loc){
        time=Time;
        dps=DPS;
        owner=Owner;
        loc = Loc;
        loc.getBlock().setType(Material.WEB);
    }
}
Смена ядра не помогает. (ну или все 4 ядра с разных сайтов, включая официальный, забагованные.)
 
Джаву обнови, убедись, что этот класс тоже компилируется и складывается в джарник
 
Джаву обнови, убедись, что этот класс тоже компилируется и складывается в джарник
Как убедиться, что он складывается в джарник? На всякий случай повторю главное: стоит прописать /reload, как всё магическим образом чинится. Только вот релодаю я часто, а после ~1 из 3-х релодов опять эта ошибка. А, или вроде как эта ошибка появляется, когда я впервые запускаю серв, до первого релода... Ну это не точно.
 
Зависимый плагин не загрузился. От чего и ошибка.
Зависимый плагин? Не, нету такого. Ток сам этот плагин, а котором классы распределены по пакетам (утилиты, объекты, основные классы.)
 
Плохая практика, завязывай с этим.
Всмысле? Ну, потестил-залил обнову-релоднул. Ничего плохого не вижу, ибо это на тестовых сервах происходит, где только тестеры и я.
 
Не юзай reload, перезагружай сервер полностью.
Во-первых, эта ошибка может появиться при первом запуске, при чём шанс при запуске больше, чем после reload-а. Во-вторых, вот сделал я апдейтик, где игроки получают на 50$ больше в начале игры, и всёёёё, перезапускать полностью серв, ждать, пока всё снова загрузится, говорить тестерам, что можно заходить... Или просто прописать /reload, созданный для таких ситуаций специально. Что же выбрать....
 
Во-первых, эта ошибка может появиться при первом запуске, при чём шанс при запуске больше, чем после reload-а. Во-вторых, вот сделал я апдейтик, где игроки получают на 50$ больше в начале игры, и всёёёё, перезапускать полностью серв, ждать, пока всё снова загрузится, говорить тестерам, что можно заходить... Или просто прописать /reload, созданный для таких ситуаций специально. Что же выбрать....
второе конечно же, не слушай его.
 
Во-первых, эта ошибка может появиться при первом запуске, при чём шанс при запуске больше, чем после reload-а. Во-вторых, вот сделал я апдейтик, где игроки получают на 50$ больше в начале игры, и всёёёё, перезапускать полностью серв, ждать, пока всё снова загрузится, говорить тестерам, что можно заходить... Или просто прописать /reload, созданный для таких ситуаций специально. Что же выбрать....
Если у тебя все на месте, после обычной перезагрузки не возникнет NCDFE.
Если плагин не является ни чей зависимостью, то перезагружай его отдельно, а не все через релоад.
 
Если у тебя все на месте, после обычной перезагрузки не возникнет NCDFE.
Если плагин не является ни чей зависимостью, то перезагружай его отдельно, а не все через релоад.
Я понял, в чём проблема. Но как решить - я не могу понять. Классы в плагине загружаются хаотично, либо непонятным мне образом. Все "забагованные" классы имеют в себе другой класс из этого же плагина (к примеру, в одном плагине муз. гуи имеет в себе инструменты, а инструменты - это отдельный объект из этого же плагина). Короче я вижу один выход: выставить конкретную очередь загрузки классов. Так как плагинов много, и все огроменные, классов дофига. И я понятия не имею как указывать даже эту последовательность... Я могу допускать сейчас ошибку X Y, возможно есть другое решение.
 
Плагинов много? Ты же говорил, что речь про один.
Ещё раз повторю вопрос: классы mobwars.Events и objMobwars.poisonedWeb находятся в одном плагине?
ДА. Плагинов много это в смысле что проектов в целом у меня полно, и если везде ставить эту очередь, я задолбаюсь их всех вписывать везде. Но эти плагины между собой никак не связаны.
 
ДА. Плагинов много это в смысле что проектов в целом у меня полно, и если везде ставить эту очередь, я задолбаюсь их всех вписывать везде. Но эти плагины между собой никак не связаны.
Ты и не сможешь никак указать порядок. Его определяет JVM. jar-файл — просто архив с классами, и PluginClassLoader в ядре не загружает классы отдельно, а добавляет .jar целиком в classpath.
В других плагинах на сервере нету класса с таким же названием (objMobwars.poisonedWeb)?
Нет ли в этих двух классах циклического импорта (импорт mobwars.Events в objMobwars.poisonedWeb И наоборот)?
 
Ты и не сможешь никак указать порядок. Его определяет JVM. jar-файл — просто архив с классами, и PluginClassLoader в ядре не загружает классы отдельно, а добавляет .jar целиком в classpath.
В других плагинах на сервере нету класса с таким же названием (objMobwars.poisonedWeb)?
Нет ли в этих двух классах циклического импорта (импорт mobwars.Events в objMobwars.poisonedWeb И наоборот)?
Я не знаю... Именно в этом классе (который poisonedWeb) ничего странного нет, я не уверен даже, что проблема в этом уже... Я выкладывал код из этого класса, там ~20 строк. Эта проблема встречается часто в моём другом самописном плагине... Там около 90% шанс того, что хоть один из классов так забагует... Вот несколько примеров: класс GUI музыки:
Код:
import java.util.ArrayList;
import java.util.HashMap;

public class musicGUI {
    public HashMap<Integer, instrument> instruments = new HashMap<>();
    public boolean playing=false;
    public ArrayList<instrument> avaliable = new ArrayList<>();
    public musicGUI(){
        
    }
}

в нём используется объект (который кстати не импортируется 😕) instrument, который находится в том же пакете, что и сам GUI музыки... Ещё пример, класс неких посетителей: там 50/50 что забагует... Ток вот в чём прикол: в main классе, где вызывается метод из класса гостей, разумеется, есть импорт тех самых гостей... А в гостях импорта main нету. Зато есть импорт 2-х других классов из того же плагина, в которых уже есть импорт класса main... Блин говорю как шизик, верующий в иллюминатов) Ну может быть в этом (д/т)ело... Хотя тогда почему в musicGUI эта ошибка... У меня даже теорий нет, от чего она :/
 
Попробовал подобавлять необязательных импортов. Сейчас тестить буду.
 
1. Возможно у тебя в разных пдагинах есть классы с одинаковым названием, тогда может быть совершенно рандомное поведение при перезагрузке.
2. Возможно ты заменяешь .jar файлы плагинов вместо того чтобы класть файлы в папку update, тогда если класс был не загружен, то класслоадер не сможет загрузить после того как файл был заменён.
 
1. Возможно у тебя в разных пдагинах есть классы с одинаковым названием, тогда может быть совершенно рандомное поведение при перезагрузке.
2. Возможно ты заменяешь .jar файлы плагинов вместо того чтобы класть файлы в папку update, тогда если класс был не загружен, то класслоадер не сможет загрузить после того как файл был заменён.
Названия разные, ради этого я и делаю пакеты utilsMobwars, utilsShops там... И я нашёл причину проблемы: я не делал импорты... В эклипсе все импорты делают автоматом, кроме тех, что в том же пакете, что и сам класс. С тех пор как я начал везде эти импорты тыкать, ошибок этих я не видел)
 
Назад
Верх