【问题标题】:How to develop Eclipse plugins in clojure?如何在 clojure 中开发 Eclipse 插件?
【发布时间】:2012-01-04 15:46:33
【问题描述】:

我想知道是否有办法在 Clojure 中开发 Eclipse 插件。需要明确的是,问题不在于使用 Eclipse 编写 Clojure 代码。

Eclipse 和 Clojure 都在 JVM 上运行,我认为应该有办法利用 Clojure(及其库)的强大功能来开发插件。我专门研究使用 Korma,但总的来说,如果有自然的方法,我希望将完整的插件移动到 clojure。

【问题讨论】:

  • 经过一番思考后,我进行了一次小小的头脑风暴,并搜索了 OSGI 和 Clojure,发现这篇关于 running clojure under OSGIemail thread 的博文暗示这不是一个好主意。有点困惑。

标签: eclipse clojure eclipse-pde eclipse-plugin


【解决方案1】:

Clojure 的 Eclipse 插件逆时针是用 Java 和 Clojure 混合编写的。它还使用 clojure.osgi 1.2.10。

因此,这是可能的概念的现场证明。 AFAIK,逆时针已被数百人成功使用。

虽然有一些限制:Clojure 的命名空间对于某些“根类加载器”来说是“全局的”。例如。如果你将 Clojure 打包到一个名为 myapp.clojure 的包中,那么你可能会有一堆其他需要 myapp.clojure 的包。比如说 myapp.bundle1、myapp.bundle2。当您这样做时,并且从每个捆绑包加载到内存中(需要)捆绑包命名空间,每个都将从正确的 ClassLoader 中加载(myapp.bundle1 的命名空间将在 myapp.bundle1 的上下文类加载器中加载,并且myapp.bundle2 的命名空间将在 myapp.bundle2 的上下文类加载器中加载)。这很棒,因为它允许 java 互操作正常工作。

但请记住,最后,从 bundle1 和 bundle2 加载的命名空间将由 bundle myapp.clojure 中的“全局命名空间世界”持有。

老实说,这还没有证明逆时针有问题。因为在同一个功能中,让包共享一个 Clojure 实例几乎是可以的。

潜在的缺点是:

  • 如果您使用第三方库,例如tools.logging,你将不能让 myapp.bundle1 中的命名空间依赖于 tools.logging 的 X 版本,同时让 myapp.bundle2 依赖于 tools.logging 的 Y 版本。也就是说,在您通过 bundle myapp.clojure 共享 clojure 的功能内部,您的工作就像 OSGi 规则不适用一样,例如 webapps 工作。
  • 如果大规模应用,则无法很好地扩展:如果每个 Eclipse 功能都重新打包自己的 Clojure 版本,则会浪费一些内存。但这个缺点更多的是理论上的,而不是实际的。这是一个可以在以后需要时解决的问题。

请注意,对于 Eclipse RCP 产品,与 Eclipse 插件相比,这些缺点消失了。

如果你想看看逆时针如何重新打包clojure,并使用clojure.osgi,你可以看看它的源码:

http://github.com/laurentpetit/ccw.clojure.git http://github.com/laurentpetit/ccw.git

HTH,

--洛朗

【讨论】:

    【解决方案2】:

    它似乎在 Eclipse 3.x 中不可用,但计划在 Eclipse 4 中使用,如 http://wiki.eclipse.org/E4/Languages 中所述。

    还有a post here on Stack Overflow asking about development of Eclipse plugins in languages other than Java 可能包含更多有用的信息。

    【讨论】:

      【解决方案3】:

      完全可以在GroovyScala 中编写Eclipse 插件。由于 Clojure 生成 .class 文件,因此应该没有什么不同。但是,插件通常使用 PDE Build 导出,默认情况下只处理 Java,因此您必须编写一个可以编译 Clojure 的 customCallback.xml 文件(有关 Scala 构建,请参阅 http://www.michel-kraemer.com/scala-projects-with-eclipse-pde-build-2)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-01-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-06
        • 2013-07-20
        • 2010-11-03
        相关资源
        最近更新 更多