我正在开发一个使用Groovy作为脚本语言的RCP应用程序。我包含了Groovy-Eclipse插件,以便应用程序的用户能够使用Groovy编辑器在应用程序中编写Groovy代码。
Groovy脚本必须使用应用程序中的一些Java类,如何在Groovy编辑器中为这些类添加可见性,以便尽可能透明地为用户提供代码完成等功能。
为了执行Groovy脚本,我使用GroovyShell并向传递给GroovyShell构造函数的绑定添加了一个属性。
这个属性是一个映射,我在其中放置了一些与应用程序相关的对象:
HashMap<String, Object> plx = new HashMap<String, Object>();
plx.put("element", new Element("xxx"));
Binding binding = new Binding();
binding.setProperty("plx", plx);假设元素是这样定义的Java类
class Element
{
String name;
public Element(String name)
{
this.name = name;
}
public String getName()
{
return name;
}
}我可以毫无问题地编写和执行以下Groovy脚本
println plx.element.name我得到了正确的结果: xxx
我遇到的问题是,当我在应用程序中编辑脚本时,我不知道如何修改编辑器使用的类路径,让它解析Element类以启用代码完成。
发布于 2015-11-05 19:55:13
您是要在每次执行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
希望这能有所帮助。
https://stackoverflow.com/questions/33543076
复制相似问题