【问题标题】:Using the Groovy editor from the Groovy-Eclipse plugin in an RCP application在 RCP 应用程序中使用 Groovy-Eclipse 插件中的 Groovy 编辑器
【发布时间】:2015-11-05 11:11:00
【问题描述】:

我正在开发一个使用 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 类以启用代码完成。

【问题讨论】:

    标签: java eclipse groovy eclipse-rcp


    【解决方案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

    希望这会有所帮助。

    【讨论】:

    • 感谢@kittaakos 的回复。我刚刚编辑了我的问题以尝试澄清它。我的问题不在运行时,而是在编辑时。
    • 一切都清楚,这是由 [groovy 推理引擎] (contraptionsforprogramming.blogspot.de/2009/11/…) 完成的。您可以创建自己的实现并将其插入您的 RCP。我觉得你必须手动实现它。至少我现在对此没有更好的主意。这不是火箭科学,它只是需要一些努力来完成它。还要寻找 org.eclipse.jdt.groovy.core.typeLookup 扩展点。
    • 非常感谢,我会听从您的建议的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-19
    • 2014-11-21
    • 2010-12-06
    • 1970-01-01
    • 2014-05-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多