如何在clojure中开发Eclipse插件?

Pun*_*nit 8 eclipse eclipse-pde eclipse-plugin clojure

我想知道是否有办法在Clojure中开发Eclipse插件.要清楚,问题不在于使用Eclipse编写Clojure代码.

Eclipse和Clojure都在JVM上运行,我觉得应该有办法利用Clojure(及其库)的强大功能来开发插件.我特意看着使用Korma,但总的来说,如果有一种自然的方式,我想将完整的插件移动到clojure.

Lau*_*tit 10

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

因此,这是一个现实的概念证明,它是可能的.和AFAIK,逆时针成功地被数百人使用.

有一些限制,因为:Clojure的命名空间对某些"根类加载器"是"全局的".EG如果你将Clojure包装在一个名为myapp.clojure的包中,那么你可能会有一堆其他的包需要myapp.clojure.比如说myapp.bundle1,myapp.bundle2.当你这样做,并且,从每个bundle,加载内存(require)bundle名称空间,每个将从正确的ClassLoader加载(myapp.bundle1的名称空间将被加载到myapp.bundle1的上下文类加载器中,并且myapp.bundle2的名称空间将加载到myapp.bundle2的上下文类加载器中.这很棒,因为它允许java interop工作正常.

但请记住,最后,从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插件相反,这些缺点消失了.

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

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

HTH,

- 劳伦特