在java程序中嵌入swank-clojure

根据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)); } } 

任何帮助非常感谢,嗯

您是否可以接受在Clojure中实现Embed类? 您可以使用gen-class (有关详细信息,请参阅Meikel Brandmeyer的教程 )和AOT编译。

代码可能会像

 (ns your-app.Embed (:require [swank.swank :as swank]) (:gen-class :methods [[startSwank [] void]])) (defn -startSwank [] (swank/start-repl)) 

(添加你需要的任何东西); 然后在应用程序的Java部分,您可以导入Clojure准备的类,实例化它并在实例上调用.startSwank()

不确定以编程方式停止Swank …我很想知道一个很好的方法来做到这一点。 (如果我弄明白的话,我会回来更新;否则,我很乐意阅读其他人的回答,详细说明如何解决这个问题。)