Стала возникать ошибка java.lang.ClassNotFoundException

  • Автор темы Автор темы NeMaster
  • Дата начала Дата начала

NeMaster

Новичок
Пользователь
Баллы
21
Небыло печали. Раньше эта ошибка не возникала, но последнее время стала преследовать.

Возникает каждый раз в разных и неожиданных местах, и причины мне пока не ясны.
Кто нибудь знает от куда это и как этой ошибки избежать?
 
Класс не найден
Если нужны подробности, давай код и лог ошибки
 
К примеру
Есть класс Db путь к файлу crypto/db/Db.class
Код:
package crypto.db;

public class Db {
    [skiped]
    public Region getRegion(Connection conn, int x, int y, int z) {
       Connection connection = conn == null ? this.connection : conn;
        try (PreparedStatement statement = connection.prepareStatement(
                "SELECT * FROM regions WHERE x1 <= ? and x2 >= ? and y1 <= ? and y2 >= ? and z1 <= ? and z2 >= ?")) {
            statement.setInt(1, x);
            statement.setInt(2, x);
            statement.setInt(3, y);
            statement.setInt(4, y);
            statement.setInt(5, z);
            statement.setInt(6, z);
            //System.out.println(statement.toString());
            ResultSet resultSet = statement.executeQuery();

            if(resultSet.next()) {
               Region region = new Region();
               region.name = resultSet.getString("name");
               region.player = resultSet.getString("player");
               region.payedTo = resultSet.getLong("payedto");
               region.x1 = resultSet.getInt("x1");
               region.x2 = resultSet.getInt("x2");
               region.y1 = resultSet.getInt("y1");
               region.y2 = resultSet.getInt("y2");
               region.z1 = resultSet.getInt("z1");
               region.z2 = resultSet.getInt("z2");
               region.isQuest = resultSet.getBoolean("quest");
                return region;
            }
            return null;
        } catch (SQLException e) {
            e.printStackTrace();
            return null;
        }
    }
    [skiped]

В этой же папке лежит файл Region.class
Код:
package crypto.db;

import java.math.BigDecimal;

public class Region {
    public String name;
    public String player;
    public int x1;
    public int x2;
    public int y1;
    public int y2;
    public int z1;
    public int z2;
    public long payedTo;
    public boolean isQuest;
}

ошибка возникает на строке
Region region = new Region();
Локально ошибка не происходит, на сервере происходит.
Есть другие аналогичные классы так же сделаны и так же используются и нет ошибки.
И этот код уже успешно работал, но в какой то момент, после очередной сборки перестал работать.

Лог:
Код:
        [skiped]
        at java.lang.Thread.run(Thread.java:833) [?:?]
Caused by: java.lang.NoClassDefFoundError: crypto/db/Region
        at crypto.db.Db.getRegion(Db.java:306) ~[?:?]
        at crypto.Main.onPlayerInteract(Main.java:675) ~[?:?]
        at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:?]
        at jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[?:?]
        at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:?]
        at java.lang.reflect.Method.invoke(Method.java:568) ~[?:?]
        at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:306) ~[spigot-api-1.18.1-R0.1-SNAPSHOT.jar:?]
        ... 22 more
Caused by: java.lang.ClassNotFoundException: crypto.db.Region
        at org.bukkit.plugin.java.PluginClassLoader.loadClass0(PluginClassLoader.java:147) ~[spigot-api-1.18.1-R0.1-SNAPSHOT.jar:?]
        at org.bukkit.plugin.java.PluginClassLoader.loadClass(PluginClassLoader.java:99) ~[spigot-api-1.18.1-R0.1-SNAPSHOT.jar:?]
        at java.lang.ClassLoader.loadClass(ClassLoader.java:520) ~[?:?]
        at crypto.db.Db.getRegion(Db.java:306) ~[?:?]
        at crypto.Main.onPlayerInteract(Main.java:675) ~[?:?]
        at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:?]
        at jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[?:?]
        at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:?]
        at java.lang.reflect.Method.invoke(Method.java:568) ~[?:?]
        at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:306) ~[spigot-api-1.18.1-R0.1-SNAPSHOT.jar:?]
        ... 22 more
 
ClassNotFoundException вызывается при отсутствии класса. Чего непонятного то?
 
1) Открой плагин на сервере архиватором и убедись, что все классы там действительно есть
2) Почисти кэши в среде разработки, скомпилируй проект ещё раз, залей на сервер и проверь
3) Во избежание казусов при тестировании не используй /reload, PlugMan и прочие перезагрузки. Исключительно /stop или /restart
4) Если все предыдущее не поможет - переустанови джаву на сервере
 
ClassNotFoundException вызывается при отсутствии класса. Чего непонятного то?
Ну как бы сказать, ошибка относительно понятна. Мне не понятно происхождение.
Если проект собирается maven'ом достаточно ли будет удалять папку сборки target?
Но вообще сейчас поэксперементирую.
 
Если проект собирается maven'ом достаточно ли будет удалять папку сборки target?
Зачем удалять-то? Просто
maven clean
Но опять же зачем...
При сборке старые файлы должны заменяться на новые.

Перед возникновением проблем не переименовывал классы или пакеты? Может менял регистр букв (больше/маленькие)?
 
Назад
Верх