Wie entwickle ich Eclipse Plugins in clojure?

8

Ich habe mich gefragt, ob es eine Möglichkeit gibt, Eclipse-Plugins in Clojure zu entwickeln. Um es klar zu sagen, die Frage besteht nicht darin, Eclipse zum Schreiben von Clojure-Code zu verwenden.

Sowohl Eclipse als auch Clojure laufen auf der JVM und ich denke, dass es einen Weg geben sollte, die Macht von Clojure (und seinen Bibliotheken) zu nutzen, um Plugins zu entwickeln. Ich habe speziell versucht, Korma zu verwenden, aber insgesamt würde ich gerne komplette Plug-ins verschieben, wenn es einen natürlichen Weg dazu gibt.

    
Punit 23.11.2011, 10:35
quelle

3 Antworten

10

Gegen den Uhrzeigersinn, das Eclipse-Plugin für Clojure, ist in gemischten Java und Clojure geschrieben. Es verwendet clojure.osgi 1.2.10 noch.

Es ist also ein Live-Beweis für das Konzept, dass es möglich ist. Und AFAIK, Counterclockwise wird von Hunderten von Menschen erfolgreich eingesetzt.

Es gibt einige Einschränkungen, tho: Clojures Namensraum ist für einige "root classloader" "global". Z.B. Wenn Sie Clojure in ein Paket mit dem Namen myapp.clojure einpacken, haben Sie wahrscheinlich eine Reihe weiterer Pakete, für die myapp.clojure erforderlich ist. Sagen Sie zum Beispiel myapp.bundle1, myapp.bundle2. Wenn Sie dies tun und von jedem Bundle die Namespaces des Bundles laden (erfordern), wird jeder aus dem rechten ClassLoader geladen (die Namespaces von myapp.bundle1 werden in den Context Classloader von myapp.bundle1 geladen, und Namespaces von myapp.bundle2 werden in den Context Classloader von myapp.bundle2) geladen. Das ist großartig, weil es erlaubt, dass die Java-Interoperabilität in Ordnung ist.

Aber denken Sie daran, dass Namespaces, die von bundle1 & amp; bundle2 wird von der "globalen Namespace-Welt" im Bundle myapp.clojure gehalten.

Um ehrlich zu sein, hat dies für Counterclockwise noch kein Problem bewiesen. Da sich innerhalb des gleichen Features die Bundles eine einzige Clojure-Instanz teilen, ist das fast in Ordnung.

Die möglichen Nachteile sind:

  • wenn Sie Bibliotheken von Drittanbietern verwenden, z. tools.logging können Namespaces in myapp.bundle1 nicht von Version X von tools.logging abhängig sein, und myapp.bundle2 hängt gleichzeitig von Version Y von tools.logging ab. Das heißt, in Ihrer Funktion, in der Sie ein gemeinsames Clojure über das Bundle myapp.clojure haben, arbeiten Sie so, als wären OSGi-Regeln nicht anwendbar, wie zum Beispiel Webapps.
  • skaliert nicht gut, wenn es massiv angewendet wird: Wenn jedes Eclipse-Feature seine eigene Version von Clojure neu paketieren würde, würde es etwas Speicherverschwendung geben. Aber dieser Nachteil ist mehr theoretisch als praktisch. Und das ist ein Problem, das später angesprochen werden kann, wenn die Notwendigkeit dafür auftaucht.

Beachten Sie, dass diese Nachteile für ein Eclipse-RCP-Produkt im Gegensatz zu einem Eclipse-Plug-in verschwinden.

Wenn Sie sehen möchten, wie Counterclockwise clojure umgepackt hat und clojure.osgi verwendet, können Sie sich den Quellcode ansehen:

Ссылка Ссылка

HTH,

- Laurent

    
Laurent Petit 04.12.2011, 20:54
quelle
4

Es scheint, dass es in Eclipse 3.x nicht verfügbar ist, aber für Eclipse 4 geplant ist, wie in Ссылка erwähnt.

Es gibt auch einen Beitrag auf Stack Overflow, in dem Sie nach der Entwicklung von Eclipse-Plugins in anderen Sprachen als Java gefragt werden , die möglicherweise mehr Informationen enthalten, die Sie nützlich finden würden.

    
bouteillebleu 23.11.2011 10:48
quelle
3

Es ist durchaus möglich, Eclipse-Plugins in Groovy oder Scala . Da Clojure .class-Dateien erzeugt, sollte es nicht anders sein. Plugins werden normalerweise mit PDE Build exportiert, das standardmäßig nur mit Java arbeitet. Daher müssen Sie eine customCallback.xml -Datei schreiben, die Clojure kompilieren kann (siehe Ссылка für Scala build).

    
Alexey Romanov 23.11.2011 13:37
quelle