Запустите Clojure REPL из Java, предоставив пользовательский контекст - PullRequest
8 голосов
/ 04 февраля 2012

Как я могу запустить Clojure REPL из моего java-приложения и предоставить некоторые «предопределенные переменные» (я новичок в Clojure, думаю, для этого есть лучший термин)? На самом деле я уже пытался заставить его работать по совпадению ... Я начал с clojure.main и добавил дополнительный вызов в RT.var (). Это правильный способ сделать это?

import clojure.lang.Symbol;
import clojure.lang.Var;
import clojure.lang.RT;

public class MyClojure {

    final static private Symbol CLOJURE_MAIN = Symbol.intern("clojure.main");
    final static private Var REQUIRE = RT.var("clojure.core", "require");
    final static private Var MAIN = RT.var("clojure.main", "main");

    // Provide some context, this is my custimisation...
    @SuppressWarnings("unused")
    final static private Var Test = RT.var("testme", "myvar", "This is the initial value");

    public static void main(String[] args) throws Exception {
         REQUIRE.invoke(CLOJURE_MAIN);
         MAIN.applyTo(RT.seq(args));
    }
}

РЕДАКТИРОВАТЬ: мое приложение не является веб-приложением. Это отдельное настольное приложение, которое в основном отображает / редактирует модель данных pojo. Теперь я хочу добавить поддержку, чтобы представить модель данных из запущенного приложения в repl clojure. После этого я смогу изменить / проверить модель данных как в исходном приложении, так и в репле.

1 Ответ

6 голосов
/ 04 февраля 2012

вам нужна функция clojure.contrib / server-socket create-repl-server :

. Вот выдержка из примеров:

(use '[clojure.contrib.server-socket :only [create-repl-server]])
(gen-class
    :name "org.project.ReplServer"
    :implements [javax.servlet.ServletContextListener])
(defn -contextInitialized [this e]
    (.start (Thread. (partial create-repl-server 11111))))

Есть также много идей по этому вопросу 1010 *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...