我正在开发一个使用Groovy作为脚本语言的RCP应用程序。我包含了Groovy-Eclipse插件,让应用程序的用户使用Groovy编辑器在应用程序中编写Groovy代码。
Groovy脚本必须使用应用程序中的一些Java类,如何在Groovy编辑器中为这些类添加可见性,以便尽可能透明地为用户提供代码完成等功能。
要执行Groovy脚本,我使用的是GroovyShell,并且我将一个属性添加到传递给GroovyShell构造函数的Binding。
这个属性是我放置一些与我的应用程序相关的对象的地图:
HashMap<String, Object> plx = new HashMap<String, Object>();
plx.put("element", new Element("xxx"));
Binding binding = new Binding();
binding.setProperty("plx", plx);
想象一下,Element是以这种方式定义的Java类
class Element
{
String name;
public Element(String name)
{
this.name = name;
}
public String getName()
{
return name;
}
}
我可以编写并执行以下Groovy脚本,没有问题
println plx.element.name
我得到了正确的结果:xxx
我遇到的问题是我不知道如何修改编辑器使用的类路径,让我解析Element类以在我的应用程序中编辑脚本时启用代码完成。
答案 0 :(得分:1)
是否要在每次执行RCP中的脚本时启动新VM,或者是否要在当前运行RCP的同一VM中运行Groovy脚本。你的问题对我来说有点过于通用......如果是后者,请确保已将Java类添加到插件依赖项中,否则在运行时只会在编译时解析它。
如果您想在没有在脚本中明确导入类的情况下使用您的类,则可以透明地添加导入。 http://www.jroller.com/melix/entry/customizing_groovy_compilation_process
您还可以通过绑定将任何服务或实例注入脚本。它基本上是关键值的映射。
一旦您的Java类在类路径上,内容辅助将在您的脚本中可用。如果您需要在内容辅助提案中进一步自定义,请查看此精彩帖子以获取有关实际实施的更多详细信息。 http://contraptionsforprogramming.blogspot.de/2009/12/extending-groovy-eclipse-for-use-with.html
希望这有帮助。