Встраивание swank-clojure в Java-программу - PullRequest
6 голосов
/ 18 апреля 2010

На основе раздела «Внедрение» 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 Ответ

5 голосов
/ 19 апреля 2010

Было бы приемлемо для вас реализовать класс Embed в Clojure? Вы можете сделать это с помощью gen-class (см. учебник Майкеля Брандмейера ) и компиляции AOT.

Код может выглядеть примерно так:

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

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

(добавьте все, что вам нужно); затем в части Java вашего приложения вы можете импортировать подготовленный к Clojure класс, создать его экземпляр и вызвать .startSwank() в экземпляре.

Не уверен насчет программной остановки Свонка ... Мне было бы интересно узнать, как сделать это самому. (И я вернусь с обновлением, если выясню это; в противном случае, я бы хотел прочитать чей-то ответ, подробно описывающий, как это сделать.)

...