Java Interop 与 Clojure,无法加载插件

发布于 2025-01-03 05:15:24 字数 2855 浏览 3 评论 0原文

我正在尝试用 Clojure 编写一个 Bukkit 插件。

一般来说,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)

I'm trying to write a Bukkit plugin in Clojure.

Generally a Bukkit plugin needs to override the Plugin class, have an onEnable() and a onDisable() method.
There are also a few other requires, like the result being in a JAR file and a plugin.yml defined, but I have all that.

(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."))

My code compiles just fine, but when I try to load it in the server, I get this exception:

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)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

与君绝 2025-01-10 05:15:24

onEnableonDisable 是否在 Plugin 中定义?

如果是这样,他们可能是造成问题的原因。
genClass 文档特别指出您不应该重新声明继承的方法。

Are onEnable and onDisable defined in Plugin?

If so, they might be causing the issue.
The genClass documentation specifically says that you shouldn't redeclare inherited methods.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文