Как я могу легко написать приложение REPL на Java? - PullRequest
2 голосов
/ 06 сентября 2011

У меня есть сервер CMS, который предоставляет клиентскую библиотеку.Я хотел бы иметь возможность управлять CMS в интерактивном режиме из командной строки.

Основной подход будет следующим:

  1. Создание подключения к CMS
  2. Добавьте объект подключения CMS в контекст REPL
  3. Подключите REPL к stdout / stderr / stdin
  4. Начните поток демона, чтобы поддерживать работу REPL.

Я надеялся, что смогу использовать Groovy для этого, но не смог заставить его работать.

Есть ли библиотека, которая обеспечивает поддержку REPL?
Можете ли вы привести простой пример?

Ответы [ 4 ]

2 голосов
/ 06 сентября 2011

Если вы не возражаете против использования Scala в качестве языка, вы можете использовать Scala REPL для изучения библиотек Java. Вы можете сделать это несколькими способами, либо с помощью

$ scala -classpath yourjarfileshere.jar

или если вы используете Maven:

Mvn Scala: консоль

Если все, что вы делаете, - это игра (не сценарий или что-то еще), то это возможный путь.

Если вы хотите встроить свой репл и все еще хотите использовать Scala, вы можете посмотреть на ответы на следующие вопросы: Заходить в интерпретатор при произвольном расположении кода scala и Запустить Scala REPL программно?

В Groovy также есть репл, groovysh, который вы можете использовать для изучения.

1 голос
/ 24 августа 2012

Beanshell может быть запущен как repl в вашем собственном потоке / main в вашем приложении:

public static void main(String[] args) throws Exception{

    Reader inreader = new InputStreamReader(System.in);
    Interpreter i = new Interpreter(inreader, System.out, System.err, true);
    try {
        BufferedReader in = new BufferedReader(inreader);
        String str;
        while ((str = in.readLine()) != null) {
            i.eval(str);
        }
        in.close();
    } catch (Exception e) {
    }
}

этот пример хорошо работает в eclipse, вы набираете его в консольном окне eclipse, и он будет нормально с вами разговаривать.

1 голос
/ 06 сентября 2011

Я получил это, работая с Groovy.

Пример

public static void main(final String[] args) {

    Binding binding = new Binding();
    // Configure your bindings here.

    Groovysh shell = new Groovysh(binding, new IO());
    shell.run(args);
}

Известные проблемы

Однако , он не будет работать, когда приложение запускается из Eclipse (то есть с использованием представления Eclipse «console»). Чтобы обойти это, вы должны обновить конфигурацию запуска Eclipse, передав следующий аргумент VM:
-Djline.terminal=jline.UnsupportedTerminal.

Дополнительная информация

1 голос
/ 06 сентября 2011

Страница Википедии для REPL упоминает BeanShell .Будет ли это работать?

...