什么';这是使用groovy在repl上开发的正确方法

什么';这是使用groovy在repl上开发的正确方法,groovy,eclipse-plugin,read-eval-print-loop,Groovy,Eclipse Plugin,Read Eval Print Loop,我刚接触Groovy。我已经习惯了Python和Clojure,在那里我可以在REPL上完成大部分编码。我正试图用Groovy做同样的事情,但我不确定是否找到了匹配的方法 Groovy Eclipse插件提供了两种交互模式,但这两种模式似乎都不能满足我的需要 第一种方法是将Groovy脚本加载到Groovy控制台。在我看来,控制台是一个很弱的编辑器,没有Eclipse的任何便利设施,比如选项卡完成。有一些很好的内省功能,但感觉上并不像交互式开发 第二种方法是在Eclipse的控制台选项卡中启动G

我刚接触Groovy。我已经习惯了Python和Clojure,在那里我可以在REPL上完成大部分编码。我正试图用Groovy做同样的事情,但我不确定是否找到了匹配的方法

Groovy Eclipse插件提供了两种交互模式,但这两种模式似乎都不能满足我的需要

第一种方法是将Groovy脚本加载到Groovy控制台。在我看来,控制台是一个很弱的编辑器,没有Eclipse的任何便利设施,比如选项卡完成。有一些很好的内省功能,但感觉上并不像交互式开发

第二种方法是在Eclipse的控制台选项卡中启动Groovy Shell。这给了我想要的REPL,但是在Eclipse中运行它感觉非常笨拙。没有标签完成。我必须在输入代码后输入“go”,我想让它进行计算

GroovyEclipse插件并没有解决这个问题,但是Groovy的独立发行版中包含的GroovyShell非常有用。它完成制表符补全(类名除外),并在您键入代码后立即计算代码。这就是记录在案的那个

我进一步挖掘了在Eclipse中运行的REPL与使用groovysh脚本从独立发行版运行的REPL之间的差异。Eclipse中的一个是“groovy.ui.InteractiveShell”的实例,groovysh脚本中的一个是“org.codehaus.groovy.tools.shell.Main”的实例。我在groovysh脚本中发现了以下代码

if[“x$OLDSHELL”!=“x”];然后
startGroovy.ui.InteractiveShell“$@” 其他的 startGroovy org.codehaus.groovy.tools.shell.Main“$@” fi
上面的代码并告诉我groovy.ui.InteractiveShell即将退出

也许将来有计划将新的shell更紧密地集成到Eclipse中

无论如何,我能够破解它,以便使用Eclipse项目中的代码所需的类路径调用groovysh脚本。现在我可以在REPL愉快地发展了。但是它很混乱,我使用Groovy独立发行版中的JAR来启动Groovy,而不是我的Eclipse项目中使用的JAR。我想可能有更好的办法


有没有人找到一个好方法来集成从groovysh脚本开始的REPL和Eclipse中的一个项目。或者,您是否找到了使用Groovy REPL进行开发的更好的方法

将groovysh集成到groovy eclipse中的工作并不多。主要原因是groovysh使用各种非显示字符来指定颜色、补全和插入符号的位置。Eclipse控制台不处理这些数据,而是将它们作为垃圾输出。此外,当前Groovy中的shell实现在Eclipse中的windows上运行不太好。与jline库存在一些不兼容之处

如果我们要与groovysh进行一些集成,这将是一项巨大的任务和一次大规模的重写。我并不反对这样做,但到目前为止还没有人要求这个功能(你是我知道的第一个)


在Eclipse中工作时从命令行运行groovysh有什么问题?(这不是一个修辞性的问题,我真的想知道缺少了什么功能。)这是大多数Groovy开发人员在Eclipse内部工作时使用的技术。

我找到了一种在ITerm中使用Eclipse自定义类路径启动groovysh的好方法。它特定于OSX和ITerm,但您可以修改它以调用不同的shell,具体取决于您如何将字符串传递给shell以使其执行


在Eclipse中设置调用脚本的外部工具。该脚本使用ITerm的applescript命令打开一个新的ITerm窗口,并执行传入的命令

下图中参数框的文本:

“cd${project_loc}&/Users/harishtella/Developer/groovy/groovy-1.8.6/bin/groovysh-cp${project_loc}/bin:${project_loc}/src:${project_loc}/lib/*:${project_loc}/test”

定义新的外部工具时,${project_loc}变量可用。有关更多信息,请参阅

确保取消选中“公用”选项卡中的“分配控制台”框

下面是“带命令的iterm”脚本的主体

#/垃圾箱/垃圾箱
#打开一个新的iterm窗口并运行作为命令传入的所有参数
#在iterm中

osascript,您可以通过执行“/groovysh-cp dir1:dir2:jar1:jar2”Andrew,感谢您的回答,向groovysh脚本添加一个类路径。从命令行使用groovysh效果很好。我只是想确定没有别的办法。有一件事困扰着我,那就是我必须用一个大-cp参数运行groovysh。我认为没有办法从Eclipse自动获取项目的运行时类路径。但这没什么大不了的,我可以做一个“ps”来找出它,或者查看“.classpath”文件。GroovyShell允许我轻松地评估文件。这对调试非常有用。Groovy总体上很棒,而且非常有趣。谢谢你的努力。
if [ "x$OLDSHELL" != "x" ]; then </br>
    startGroovy groovy.ui.InteractiveShell "$@"
else
    startGroovy org.codehaus.groovy.tools.shell.Main "$@"
fi
#!/bin/sh
# open a new iterm window and runs all the arguments passed in as a command
# in iterm
osascript <<-eof
tell application "iTerm"
    set myterm to (make new terminal)
tell myterm
    launch session "Default session"
        tell the last session
            set name to "console"
            write text "$@"
end tell
end tell
end tell
eof