在java程序中嵌入swank-clojure

时间:2010-04-18 03:32:44

标签: java clojure swank

基于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)); 
    } 
} 

任何帮助非常感谢, 嗯

1 个答案:

答案 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 ...我很想知道自己这样做的好方法。 (如果我弄明白的话,我会回来更新;否则,我很乐意阅读其他人的回答,详细说明如何解决这个问题。)