基于http://github.com/technomancy/swank-clojure的嵌入部分, 我正在使用以下内容进行测试。有没有更好的方法 这不使用编译器?有没有办法以编程方式 停止swank?似乎start-repl控制了线程。什么 将是一个很好的方法来产生另一个线程,并能够 以编程方式杀死该线程。
import clojure.lang.Compiler;
import java.io.StringReader;
public class Embed {
public static void main(String[] args) throws Exception {
final String startSwankScript =
"(ns my-app\n" +
" (:use [swank.swank :as swank]))\n" +
"(swank/start-repl) ";
Compiler.load(new StringReader(startSwankScript));
}
}
任何帮助非常感谢, 嗯
答案 0 :(得分:5)
您是否可以接受在Clojure中实现Embed
类?您可以使用gen-class
(有关详细信息,请参阅Meikel Brandmeyer's tutorial)和AOT编译来执行此操作。
代码可能类似于
(ns your-app.Embed
(:require [swank.swank :as swank])
(:gen-class
:methods [[startSwank [] void]]))
(defn -startSwank []
(swank/start-repl))
(添加您需要的任何其他内容);然后在应用程序的Java部分,您可以导入Clojure准备的类,实例化它并在实例上调用.startSwank()
。
不确定以编程方式停止Swank ...我很想知道自己这样做的好方法。 (如果我弄明白的话,我会回来更新;否则,我很乐意阅读其他人的回答,详细说明如何解决这个问题。)