ClassNotFoundException в java-плагине Bukkit

Я пытаюсь оживить плагин и получаю ошибку:

[03:01:18 ERROR]: Could not load 'plugins\Reporter.jar' in folder 'plugins'
org.bukkit.plugin.InvalidPluginException: java.lang.ClassNotFoundException: me.f
levasgr.rainbow.Reporter
        at org.bukkit.plugin.java.JavaPluginLoader.loadPlugin(JavaPluginLoader.j
ava:184) ~[craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
        at org.bukkit.plugin.SimplePluginManager.loadPlugin(SimplePluginManager.
java:308) ~[craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
        at org.bukkit.plugin.SimplePluginManager.loadPlugins(SimplePluginManager
.java:231) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
        at org.bukkit.craftbukkit.v1_7_R1.CraftServer.loadPlugins(CraftServer.ja
va:255) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
        at org.bukkit.craftbukkit.v1_7_R1.CraftServer.<init>(CraftServer.java:23
3) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
        at net.minecraft.server.v1_7_R1.PlayerList.<init>(PlayerList.java:63) [c
raftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
        at net.minecraft.server.v1_7_R1.DedicatedPlayerList.<init>(SourceFile:14
) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
        at net.minecraft.server.v1_7_R1.DedicatedServer.init(DedicatedServer.jav
a:126) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
        at net.minecraft.server.v1_7_R1.MinecraftServer.run(MinecraftServer.java
:424) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
        at net.minecraft.server.v1_7_R1.ThreadServerApplication.run(SourceFile:6
17) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
Caused by: java.lang.ClassNotFoundException: me.flevasgr.rainbow.Reporter
        at java.net.URLClassLoader$1.run(Unknown Source) ~[?:1.7.0_25]
        at java.net.URLClassLoader$1.run(Unknown Source) ~[?:1.7.0_25]
        at java.security.AccessController.doPrivileged(Native Method) ~[?:1.7.0_
25]
        at java.net.URLClassLoader.findClass(Unknown Source) ~[?:1.7.0_25]
        at org.bukkit.plugin.java.PluginClassLoader.findClass0(PluginClassLoader
.java:80) ~[craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
        at org.bukkit.plugin.java.PluginClassLoader.findClass(PluginClassLoader.
java:53) ~[craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
        at java.lang.ClassLoader.loadClass(Unknown Source) ~[?:1.7.0_25]
        at java.lang.ClassLoader.loadClass(Unknown Source) ~[?:1.7.0_25]
        at java.lang.Class.forName0(Native Method) ~[?:1.7.0_25]
        at java.lang.Class.forName(Unknown Source) ~[?:1.7.0_25]
        at org.bukkit.plugin.java.JavaPluginLoader.loadPlugin(JavaPluginLoader.j
ava:173) ~[craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
        ... 9 more

Я сделал все правильно! plugin.yml внешний jar и экспорт, но все еще не работает. Есть идеи, почему?


person Community    schedule 06.01.2014    source источник


Ответы (2)


Как говорится в ошибке,

java.lang.ClassNotFoundException: me.f levasgr.rainbow.Reporter

он не может найти основной класс вашего плагина. Возможно, одно из имен ваших пакетов написано с заглавной буквы или ваш основной класс — с маленькой буквы. Загрузчик плагинов Bukkit чувствителен к регистру, когда дело доходит до загрузки основного класса.

person Rythix    schedule 06.01.2014
comment
i.imgur.com/ckJOJCE.png Думаю, с именами все в порядке. Поменял основной на me.flevasgr.Reporter и все равно ничего - person ; 06.01.2014
comment
В этом случае это должно быть me.flevasgr.rainbow.Reporter.Reporter. Bukkit не смог найти класс, так как вы указывали только пакет, Bukkit требует пакет вместе с классом. - person Rythix; 06.01.2014
comment
Я имел в виду, что в plugin.yml main должно быть равно me.flevasgr.rainbow.Reporter.Reporter, моя вина, что я не указал это - person Rythix; 06.01.2014

Существуют разные причины java.lang.ClassNotFoundException в bukkit, наиболее распространенная причина заключается в том, что plugin.yml не указывает на правильное местоположение.

Если у вас есть следующий класс:

package me.flevasgr.rainbow.reporter;
//...
public class Reporter {

Затем вы должны скопировать полный пакет, поставить точку, а затем поместить имя класса, например:

main: me.flevasgr.rainbow.reporter.Reporter 

Это гарантирует, что bukkit найдет ваш класс в нужном месте.

person Ferrybig    schedule 11.01.2016