2012-02-06 12 views
1

私はClojureでBukkitプラグインを作成しようとしています。Java Interop with Clojure、プラグインをロードできませんでした

一般に、Bukitのプラグインは、onEnable()onDisable()というメソッドを持つPluginクラスをオーバーライドする必要があります。 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) 

答えて

4

onEnablePluginで定義されたonDisableていますか?

もしそうなら、問題を引き起こしている可能性があります。 genClassのドキュメントでは、継承されたメソッドを再宣言しないように指定しています。