如何在Java中轻松编写REPL应用程序?
我有一个提供客户端库的CMS服务器。 我希望能够从命令行以交互方式驱动CMS。
基本方法是:
- 创建与CMS的连接
- 将CMS连接对象添加到REPL上下文
- 将REPL连接到stdout / stderr / stdin
- 启动守护程序线程以保持REPL运行。
我希望我可以利用Groovy来做到这一点,但还没有设法让它工作。
是否有提供REPL支持的库?
你能提供一个简单的例子吗?
如果您不介意使用Scala作为您的语言,可以使用Scala REPL来探索Java库。 您可以通过多种方式执行此操作
$ scala -classpath yourjarfileshere.jar
或者如果你正在使用maven:
mvn scala:console
如果您正在播放的所有内容(不是脚本或任何内容),那么这是一种可行的方法。
如果您希望嵌入您的repl,并且您仍然愿意使用Scala,您可以查看这些问题的答案: 在任意scala代码位置插入解释器并以编程方式启动Scala REPL?
Groovy还有一个repl,groovysh,你可以用来探索。
REPL的Wikipedia页面提到BeanShell 。 那会有用吗?
我用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’控制台’视图),它将无法工作。 要解决此问题,必须更新Eclipse启动配置以传递以下VM参数:
-Djline.terminal=jline.UnsupportedTerminal
。
更多信息
- Groovy Shell的文档 。
Beanshell可以在您的应用程序中的自己的线程/ main中作为repl运行:
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的控制台窗口输入它然后它会很好地回复你。