На основе раздела Embedding http://github.com/technomancy/swank-clojure я использую следующее для проверения его. Существует ли лучший способ сделать это, которое не использует Компилятор? Существует ли способ программно остановить чванство? Это кажется, запускаются-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
Было бы приемлемо для вас реализовать класс 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 ()
в экземпляре.
Не уверен насчет программной остановки Swank ... Мне было бы любопытно узнать, как самому это сделать. (И я вернусь с обновлением, если выясню это; в противном случае я бы хотел прочитать чей-нибудь ответ, в котором подробно описано, как это сделать.)