我想知道是否有方法在Clojure中開發Eclipse插件。要明確,問題不在於使用Eclipse編寫Clojure代碼。如何在clojure中開發Eclipse插件?
Eclipse和Clojure都運行在JVM上,我覺得應該有辦法利用Clojure(及其庫)開發插件的能力。我特別關注使用Korma,但總體而言,如果有一種自然的方式來完成,我希望將完整的插件移至clojure。
我想知道是否有方法在Clojure中開發Eclipse插件。要明確,問題不在於使用Eclipse編寫Clojure代碼。如何在clojure中開發Eclipse插件?
Eclipse和Clojure都運行在JVM上,我覺得應該有辦法利用Clojure(及其庫)開發插件的能力。我特別關注使用Korma,但總體而言,如果有一種自然的方式來完成,我希望將完整的插件移至clojure。
逆時針方向,Clojure的Eclipse插件是用混合Java和Clojure編寫的。它使用clojure.osgi 1.2.10呢。
所以這是一個活的證明概念,它是可能的。而AFAIK,逆時針成功地被數百人使用。
有一些約束,tho:Clojure的名稱空間對某些「根類加載器」是「全局」的。例如。如果將Clojure包裝在一個名爲myapp.clojure的包中,那麼您可能會有一堆其他包需要myapp.clojure。例如說myapp.bundle1,myapp.bundle2。當你這樣做時,並且從每個bundle中加載內存(需要)bundle命名空間,每一個都將從正確的ClassLoader中加載(myapp.bundle1的命名空間將被加載到myapp.bundle1的上下文classloader中,並且myapp.bundle2的名稱空間將在myapp.bundle2的上下文類加載器中加載)。這很好,因爲它允許java interop工作正常。
但是請記住,最終,從bundle1 & bundle2加載的名稱空間將由myapp.clojure包中的「全局命名空間世界」保存。
說實話,這對於逆時針還沒有證明是個問題。因爲在同一個特性中,讓包共享一個Clojure實例幾乎沒問題。
潛在的缺點是:
請注意,對於Eclipse RCP產品,與Eclipse插件相反,這些缺陷消失。
如果你想看到逆時針是如何重新包裝的Clojure,並使用clojure.osgi,你可以看看它的源代碼:
http://github.com/laurentpetit/ccw.clojure.git http://github.com/laurentpetit/ccw.git
HTH,
- 洛朗
看來它在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可能有更多的信息,你會發現有用的。
完全有可能在Groovy或Scala中編寫Eclipse插件。由於Clojure生成.class文件,它應該沒有什麼不同。但是,插件通常是使用PDE Build導出的,PDE Build默認只處理Java,因此您必須編寫一個可編譯Clojure的customCallback.xml
文件(請參閱用於Scala構建的http://www.michel-kraemer.com/scala-projects-with-eclipse-pde-build-2)。
思考了一下後,我進行了一次小型頭腦風暴,並搜索了OSGI和Clojure,並發現了這篇關於[在OSGI下運行clojure]的博客文章(http://www.talios.com/clojure_running_succ essfully_under_osgi.htm)和[email thread](http://osdir.com/ml/clojure/2009-10/msg00113.html)暗示它不是一個好主意。有點困惑。 – Punit