编辑:在Bukkit论坛和Github上还有一些与此问题相关的讨论.
所以,我知道有一两个人没有运气就试过这个......但我想我差不多了.
一个问题:我不懂Java,所以这对我来说有点陌生.无论如何..
所以,我在Clojure中创建了一个简单的类,如下所示:
(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!"))
Run Code Online (Sandbox Code Playgroud)
我使用clojure的compile函数将其编译为Java类,如下所示.
(set! *compile-path* ".")
(compile 'com.gdude2002.ClojurePlugin.mainclj)
Run Code Online (Sandbox Code Playgroud)
然后我手动将它放在jar中,在com/gdude2002/ClojurePlugin/mainclj.class下(以及将plugin.yml放在root中).
到现在为止还挺好.这个方法不是关于我的代码(特别是)的bukkit婊子,我认为这是一件好事.现在,关于这个问题.
当我尝试使用这个手工制作的jar启动服务器时,我得到以下输出.
21:43:30 [SEVERE] Could not load 'plugins\plugin.jar' in folder 'plugins'
org.bukkit.plugin.InvalidPluginException: java.lang.NoClassDefFoundError: clojure/lang/IFn
Run Code Online (Sandbox Code Playgroud)
"所以,"我想,"这看起来很简单 - 它找不到Clojure,对吧?" 所以,我把clojure jar放在各种各样的地方,同样的错误.我还将META-INF/MANIFEST.MF添加到包含的jar中Class-Path: ../lib.依然没有.
因此,我认为自己很聪明,我将clojure文件夹从Clojure jar中取出并将其推入我的文件夹中,同时将文件夹放在../lib中,以及我认为可能有用的其他地方.
现在,我收到此错误..
21:51:33 [SEVERE] Could not load 'plugins\plugin.jar' in folder 'plugins'
org.bukkit.plugin.InvalidPluginException: java.lang.ExceptionInInitializerError
...
Caused …Run Code Online (Sandbox Code Playgroud) 在一个大型项目的开发过程中,我们已经积累了大量的单元测试.许多这些测试通常在同一个进程中启动服务器,连接到这些服务器并关闭服务器和客户端.
但是,这些测试随机失败,并显示"无法绑定地址127.0.0.1 :( port)".重新运行测试时,错误通常会消失.
现在,我们认为这是我们测试的问题,但我们决定在Clojure中编写一个小测试,我将在下面发布(并评论非Clojure人员).
(ns test
(:import [java.net Socket ServerSocket]))
(dotimes [n 10000] ; Run the test ten thousand times
(let [server (ServerSocket. 10000) ; Start a server on port 10000
client (Socket. "localhost" 10000) ; Start a client on port 10000
p (.getLocalPort client)] ; Get the local port of the client
(.close client) ; Close the client
(.close server) ; Close the server
(println "n = " n) ; Debug
(println "p = " p) ; Debug …Run Code Online (Sandbox Code Playgroud) 我正在使用Java 7和Clojure 1.4.
我在Clojure中编写了一些数据库测试,用于包含Date对象的表,使用OracleDB JDBC.
我需要比较我收到的日期(一个Date对象)和String- 所以我可能需要将该字符串转换为一个Date对象.经过一些谷歌搜索,我发现了Java SimpleDateFormat.
这是我使用的(有额外的东西用于调试)
(defn parseDate [date]
(do (debug (str "Parsing date: " date ))
(let [ dateobj (java.text.SimpleDateFormat. "dd-MMM-YY")
parsed (do (. dateobj setLenient false) (. dateobj parse date))]
(debug (str "Result: " parsed)) parsed)))
Run Code Online (Sandbox Code Playgroud)
我扔了一些日期,我得到以下输出..
Parsing date: 01-jan-12
Result: Mon Jan 02 00:00:00 GMT 2012
Parsing date: 01-jan-13
Result: Mon Dec 31 00:00:00 GMT 2012
Parsing date: 00-jan-12
Result: Mon Jan 02 00:00:00 …Run Code Online (Sandbox Code Playgroud) 所以,我最近一直在研究IRC机器人.它存储了上次有人做某事时作为反垃圾邮件功能的一部分.它用于初始化WHO回复中的用户列表,我一直在使用RPL_NAMREPLY.
它几乎可以工作.但是,我有一个非常奇怪的问题..
import time
# ...
def irc_unknown(self, prefix, command, params):
"""Handle packets that aren't handled by the library."""
# Prefix: asimov.freenode.net
# Command: RPL_BANLIST
# Params: ['MCBans_Testing', '#mcbans-test', 'a!*@*', 'gdude2002!g@unaffiliated/gdude2002', '1330592882']
self.runHook("unknownMessage", {"prefix": prefix, "command": command, "params": params})
if command == "RPL_BANLIST":
channel = params[1]
mask = params[2]
owner = params[3]
time = params[4]
if channel not in self.banlist.keys():
done = {"done": False, "total": 1}
banmask = {"owner": owner.split("!")[0], "ownerhost": owner, "time": time, "mask": mask,
"channel": channel}
done[mask] = …Run Code Online (Sandbox Code Playgroud)