一千萬個為什麽

搜索

在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)); 
    } 
} 

任何幫助非常感謝, HHH

最佳答案

您是否可以接受在Clojure中實現 Embed 類?你可以用 gen-class 做到這一點(參見 Meikel Brandmeyer's有關詳細信息的教程和AOT編譯。

代碼可能會像

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

(defn -startSwank []
  (swank/start-repl))

(添加你需要的任何東西);然後在應用程序的Java部分,您可以導入Clojure準備的類,實例化它並在實例上調用 .startSwank()

不確定以編程方式停止Swank ...我很想知道一個很好的方法來做到這一點。 (如果我弄明白的話,我會回來更新;否則,我很樂意閱讀其他人的回答,詳細說明如何解決這個問題。)

轉載註明原文: 在java程序中嵌入swank-clojure