编辑:在the Bukkit forums和on Github上还有一些关于这个问题的讨论正在进行中。
所以,我知道有一两个人尝试过这个方法,但没有成功。但我想我快到了。
一个问题是:我不懂Java,所以这对我来说有点陌生。不管怎样..。
(ns com.gdude2002.ClojurePlugin.mainclj
(:gen-class
:name com.gdude2002.ClojurePlugin.mainclj
:extends org.bukkit.plugin.java.JavaPlugin)
(:import org.bukkit.plugin.java.JavaPlugin))
(defn -onEnable [this] (java.util.logging.Logger/getLogger "Loaded clojure plugin!"))
(defn -onDisable [this] (java.util.logging.Logger/getLogger "Unloaded clojure plugin!"))我使用clojure的compile函数将其编译成一个Java类,如下所示。
(set! *compile-path* ".")
(compile 'com.gdude2002.ClojurePlugin.mainclj)然后,我手动将其放入jar中,放在com/gdude2002/ClojurePlugin/mainclj.class下(并将plugin.yml放在根目录中)。
到目前一切尚好。这种方法不会让bukkit对我的代码发牢骚(特别是),我想这是一件好事。现在,让我们来看看问题。
21:43:30 [SEVERE] Could not load 'plugins\plugin.jar' in folder 'plugins'
org.bukkit.plugin.InvalidPluginException: java.lang.NoClassDefFoundError: clojure/lang/IFn“所以,”我想,“这看起来很简单--它找不到Clojure,对吧?”因此,我将clojure jar放在所有位置,但都有相同的错误。我还将META-INF/MANIFEST.MF添加到包含Class-Path: ../lib的jar中。还是一无所获。
因此,我认为我是聪明的,我从clojure jar中取出Clojure文件夹并将其放入我的文件夹中,还将该文件夹放在../lib和其他我认为可能有帮助的位置。
现在,我得到了这个错误..
21:51:33 [SEVERE] Could not load 'plugins\plugin.jar' in folder 'plugins'
org.bukkit.plugin.InvalidPluginException: java.lang.ExceptionInInitializerError
...
Caused by: java.io.FileNotFoundException: Could not locate clojure/core__init.class or clojure/core.clj on classpath:
...问题是,据我所知,这两件事都存在..
// IntelliJ API Decompiler stub source generated from a class file
// Implementation of methods is not available
package com.gdude2002.ClojurePlugin;
public class mainclj extends org.bukkit.plugin.java.JavaPlugin {
private static final clojure.lang.Var main__var;
private static final clojure.lang.Var onEnable__var;
private static final clojure.lang.Var getResource__var;
private static final clojure.lang.Var onLoad__var;
private static final clojure.lang.Var getLogger__var;
private static final clojure.lang.Var saveDefaultConfig__var;
private static final clojure.lang.Var getDescription__var;
private static final clojure.lang.Var removeDDL__var;
private static final clojure.lang.Var onDisable__var;
private static final clojure.lang.Var isInitialized__var;
private static final clojure.lang.Var saveResource__var;
private static final clojure.lang.Var onCommand__var;
private static final clojure.lang.Var getDefaultWorldGenerator__var;
private static final clojure.lang.Var toString__var;
private static final clojure.lang.Var getDataFolder__var;
private static final clojure.lang.Var installDDL__var;
private static final clojure.lang.Var getDatabase__var;
private static final clojure.lang.Var getFile__var;
private static final clojure.lang.Var getClassLoader__var;
private static final clojure.lang.Var getCommand__var;
private static final clojure.lang.Var getDatabaseClasses__var;
private static final clojure.lang.Var getConfig__var;
private static final clojure.lang.Var reloadConfig__var;
private static final clojure.lang.Var clone__var;
private static final clojure.lang.Var setEnabled__var;
private static final clojure.lang.Var saveConfig__var;
public mainclj() { /* compiled code */ }
public java.io.File getDataFolder() { /* compiled code */ }
public boolean onCommand(org.bukkit.command.CommandSender p0, org.bukkit.command.Command p1, java.lang.String p2, java.lang.String[] p3) { /* compiled code */ }
public void reloadConfig() { /* compiled code */ }
public org.bukkit.configuration.file.FileConfiguration getConfig() { /* compiled code */ }
public java.io.File getFile() { /* compiled code */ }
public void saveConfig() { /* compiled code */ }
public org.bukkit.command.PluginCommand getCommand(java.lang.String p0) { /* compiled code */ }
public void onEnable() { /* compiled code */ }
public java.util.logging.Logger getLogger() { /* compiled code */ }
public void onLoad() { /* compiled code */ }
public java.lang.ClassLoader getClassLoader() { /* compiled code */ }
public void saveDefaultConfig() { /* compiled code */ }
public org.bukkit.plugin.PluginDescriptionFile getDescription() { /* compiled code */ }
public com.avaje.ebean.EbeanServer getDatabase() { /* compiled code */ }
public void removeDDL() { /* compiled code */ }
public void onDisable() { /* compiled code */ }
public boolean isInitialized() { /* compiled code */ }
public org.bukkit.generator.ChunkGenerator getDefaultWorldGenerator(java.lang.String p0, java.lang.String p1) { /* compiled code */ }
public void installDDL() { /* compiled code */ }
public void saveResource(java.lang.String p0, boolean p1) { /* compiled code */ }
public java.util.List getDatabaseClasses() { /* compiled code */ }
public java.lang.String toString() { /* compiled code */ }
public java.lang.Object clone() { /* compiled code */ }
public void setEnabled(boolean p0) { /* compiled code */ }
public java.io.InputStream getResource(java.lang.String p0) { /* compiled code */ }
public static void main(java.lang.String[] p0) { /* compiled code */ }
}问题是,我没有!
有人对此有什么想法吗?
发布于 2012-12-13 23:25:00
我通过按照in this post配置调用代码的类加载器解决了这个问题。
我的情况可能与调用Java代码的情况略有不同。换句话说,在调用使用gen- CommandExecutor (Clojure)创建的类中的方法之前,我立即在我的类(Java)中调用了该代码。
https://stackoverflow.com/questions/11275667
复制相似问题