Java Interop с Clojure, не удалось загрузить плагин - PullRequest
1 голос
/ 07 февраля 2012

Я пытаюсь написать плагин Bukkit в Clojure.

Обычно плагин Bukkit должен переопределить класс Plugin, иметь методы onEnable() и onDisable().Есть также несколько других требований, например, результат находится в файле JAR и определен plugin.yml , но у меня есть все это.

(ns net.jonnay.watershipdown.WatershipDown
  (:import org.bukkit.Bukkit
           org.bukkit.plugin.Plugin)
  (:gen-class
   :name net.jonnay.watershipdown.WatershipDown
   :extends org.bukkit.plugin.Plugin
   :methods [ [onEnable [] void]
              [onDisable [] void] ]
   )
)

(set! *warn-on-reflection* true)

(defn debug-to-mc-log [^String msg]
  (let [logger (Bukkit/getLogger)]
    (. logger info (str "(DEBUG) " msg))))

(defn -onEnable []
  (debug-to-mc-log "Enabled Watership down.  Super Clojure Powers!"))

(defn -onDisable []
  (debug-to-mc-log "Disabled Watership down."))

Мой код прекрасно компилируется,но когда я пытаюсь загрузить его на сервер, я получаю следующее исключение:

13:29:20 [SEVERE] Could not load 'plugins/watershipdown-0.1.jar' in folder 'plugins': 
java.lang.ClassFormatError: Duplicate method name&signature in class file net/jonnay/watershipdown/WatershipDown
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
    at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    at org.bukkit.plugin.java.PluginClassLoader.findClass(PluginClassLoader.java:41)
    at org.bukkit.plugin.java.PluginClassLoader.findClass(PluginClassLoader.java:29)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:247)
    at org.bukkit.plugin.java.JavaPluginLoader.loadPlugin(JavaPluginLoader.java:131)
    at org.bukkit.plugin.SimplePluginManager.loadPlugin(SimplePluginManager.java:285)
    at org.bukkit.plugin.SimplePluginManager.loadPlugins(SimplePluginManager.java:200)
    at org.bukkit.craftbukkit.CraftServer.loadPlugins(CraftServer.java:156)
    at org.bukkit.craftbukkit.CraftServer.<init>(CraftServer.java:132)
    at net.minecraft.server.ServerConfigurationManager.<init>(ServerConfigurationManager.java:52)
    at net.minecraft.server.MinecraftServer.init(MinecraftServer.java:148)
    at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:407)
    at net.minecraft.server.ThreadServerApplication.run(SourceFile:465)

1 Ответ

4 голосов
/ 07 февраля 2012

onEnable и onDisable определены в Plugin?

Если это так, они могут быть причиной проблемы. Документация genClass, в частности, гласит, что вы не должны повторно объявлять унаследованные методы.

...