我想知道是否有一种方法可以使用Clojure开发Eclipse插件。要明确,问题不是关于使用Eclipse编写Clojure代码。
Eclipse和Clojure都在JVM上运行,我认为应该有一种方式来利用Clojure(及其库)的能力来开发插件。我特别关注使用Korma,但总体上,如果有自然的方法,我希望将完整的插件移植到Clojure。
我想知道是否有一种方法可以使用Clojure开发Eclipse插件。要明确,问题不是关于使用Eclipse编写Clojure代码。
Eclipse和Clojure都在JVM上运行,我认为应该有一种方式来利用Clojure(及其库)的能力来开发插件。我特别关注使用Korma,但总体上,如果有自然的方法,我希望将完整的插件移植到Clojure。
逆时针,Clojure的Eclipse插件,使用混合的Java和Clojure编写,目前使用clojure.osgi 1.2.10版本。
因此它是一个活生生的概念证明,说明这是可能的。据我所知,逆时针已经成功地被数百人使用。
然而,存在一些限制:Clojure的命名空间对某些“根类装入器”来说是“全局”的。例如,如果您将Clojure打包到名为myapp.clojure的bundle中,那么您可能会有一堆其他的bundles需要require myapp.clojure,比如myapp.bundle1、myapp.bundle2等。当您从每个bundle中将bundle的命名空间加载到内存中(require),每个命名空间都将从正确的ClassLoader中加载(myapp.bundle1的命名空间将在myapp.bundle1的上下文类加载器中加载,myapp.bundle2的命名空间将在myapp.bundle2的上下文类加载器中加载)。这很棒,因为它允许Java互操作正常工作。
但请记住,最终从bundle1和bundle2加载的命名空间将由bundle myapp.clojure中的“全局命名空间世界”持有。
老实说,这对于逆时针来说还没有成为问题。因为在同一个Feature中,让bundles共享一个单独的Clojure实例几乎是可以的。
潜在的缺点包括:
完全可以使用Groovy或Scala编写Eclipse插件。由于Clojure生成.class文件,因此应该没有什么不同。但是,插件通常使用PDE Build导出,该工具默认仅处理Java,因此您需要编写一个customCallback.xml
文件来编译Clojure(请参见http://www.michel-kraemer.com/scala-projects-with-eclipse-pde-build-2以获取Scala构建信息)。