# Eine Library in Eclipse zur Verfügung stellen



## Gonzo17 (14. Jan 2013)

Servus,

mein Ziel ist es ein Plugin zu schreiben, das mir ermöglicht, dass ich eine eigene Library in Eclipse zur Verfügung stellen kann. Ich möchte in einem Projekt keine .jar-Datei einbinden, da ich die dann mit ins SVN hauen müsste, sondern einfach als Library, wie es auch beim JRE selbst, den Plug-in Dependencies, JUnit oder Maven ist.

Um mal zu verdeutlichen was ich meine. Mit einem Rechtsklick auf Properties bei einem Projekt gelangt man auf den Dialog zum Editieren des Projekts. Dort dann Java Build Path > Libraries > Add Library... und genau dort möchte XYZ Library auswählen können, die ich durch die Installation meines Plugins in dieser Eclipse-Umgebung zur Verfügung stelle.

Klar, was ich meine? Muss ja irgendwie gehen. Wie gesagt, JUnit und Maven machen das ja auch. Finde nur keinen gescheiten Ansatz. Habe bereits nach Extension Points geschaut, aber nichts wirklich brauchbares gefunden. Ne Google-Suche gestaltet sich da schwierig, weil man bei den Stichworten "Eclipse", "Library", "Plugin" und so weiter eben ganz andere Ergebnisse bekommt. Jemand ne Idee?


----------



## Gonzo17 (18. Jan 2013)

Keiner eine Idee? Oder zumindest den Ansatz einer Idee? Wenn ich wüsste, wo ich es in der Eclipse-Doku finden könnte, wäre mir schon sehr geholfen, aber bisher hab ich da rein garnichts gefunden...


----------



## Robokopp (18. Jan 2013)

Also es zwingt dich erstmal keiner, die lib mit ins Projekt zu legen. 

Du kannst beispielsweise ein Projekt libraries anlegen und da alle libs reinpacken. 

Außerdem kannst du User libraries anlegen, die du dann über den build path auswählen kannst ohne jedes mal die jar Datei zu suchen. 

Ich hoffe das war es was du mit deiner frage gemeint hast


----------



## maki (18. Jan 2013)

Was Gonzo17 wohl meinte war, wie man ein Eclipse Feature schreibt welches einem die Jars ins Projekt einbinden kann, wo wie das auch mit GWT/JEE/JSF/etc. pp. gemacht wird.


----------



## Spacerat (18. Jan 2013)

Da gibt es doch auch die Option UserLibrarys zu definieren und einzubinden. Genügt das nicht? Diese UserLibs sind auch nicht blos Projektspezifisch, sondern man kann sie (natürlich, nachdem man sie definiert hat) in jedem anderen Projekt einbinden. Ich nutze diese Option z.B. für Java3D, JOGL, LWJGL und meine eigenen Libs. Ich denke mal nicht, dass einer von den Entwicklern dieser APIs erwarten würde, dass gerade seine Lib einen gesonderten Platz (wie z.B. 'ne JRE) in Eclipse bekommt, warum auch.


----------



## Gonzo17 (18. Jan 2013)

maki hat gesagt.:


> Was Gonzo17 wohl meinte war, wie man ein Eclipse Feature schreibt welches einem die Jars ins Projekt einbinden kann, wo wie das auch mit GWT/JEE/JSF/etc. pp. gemacht wird.



Ja, das war mein Gedanke.

Ich füge mal Screenshots hinzu, um es zu verdeutlichen.

Oder wird das letztlich über die Perspektive auch beeinflusst bzw über den View?

Der Hintergrund ist, dass wir eine Schnittstelle haben, mit der man Bausteine für unsere Software bauen kann, also ähnlich wie zB das Plugin-Development bei Eclipse. Jetzt möchten wir ein Eclipse Plugin zur Verfügung stellen, mit dem man solche Bausteine programmieren kann, ohne dass weitere Abhängigkeiten oder Einstellungen notwendig wären. Dazu möchte ich dann eine entsprechende "Project nature" erstellen, damit man Projekte von genau "unserem" Typ erstellen kann. Die entsprechenden .jar-Dateien würde ich natürlich im Plugin mit ausliefern, aber die Frage ist, wie man sie im Projekt direkt verfügbar machen kann. Wie gesagt, viele Plugins können das ja, aber ich hab keinen Anhaltspunkt, bei dem ich ansetzen könnte.


----------



## Spacerat (18. Jan 2013)

Und genau das geht mit oben besagter Option.
BuildPath->Add Library->User Library
(User Librarys) klicken, das Gewünschte zusammenstellen und fertig. Obwohl "Referenced Librarys" bekommt man, wenn man (external) Jars added.


----------



## maki (18. Jan 2013)

UserLibrary hat rein gar nix mit Gonzos Frage zu tun 

Er will ein Eclipse Feature, welches Jars mitbringt und zur Auswahl stellt.

Hoffentlich kommt Wildcard nochmal vorbei..


----------



## Spacerat (18. Jan 2013)

Was sucht er denn dann? Eclipse-PIs definieren ihre Libs afaik über die plugin-xml (extension point="ClassPathContainerXXX"). Dazu braucht's doch aber kein extra Plugin.


----------



## Gonzo17 (21. Jan 2013)

Spacerat hat gesagt.:


> Und genau das geht mit oben besagter Option.
> BuildPath->Add Library->User Library
> (User Librarys) klicken, das Gewünschte zusammenstellen und fertig. Obwohl "Referenced Librarys" bekommt man, wenn man (external) Jars added.



Hm, ne. Genau das will ich ja nicht. Ich möchte doch, dass derjenige, der mein Plugin installiert, nicht noch extra eine User-Library anlegen muss. Das wäre ja absurd. Musst du doch auch nicht, wenn du eben eines der vielgenannten Tools in Eclipse installierst. Das wollte ich mit meinen Screenshots zeigen.



Spacerat hat gesagt.:


> Was sucht er denn dann? Eclipse-PIs definieren ihre Libs afaik über die plugin-xml (extension point="ClassPathContainerXXX"). Dazu braucht's doch aber kein extra Plugin.



Ehm, das widerspricht sich ein wenig. Ich nehme ja stark an, dass das über irgendeinen Extension Point läuft, aber wie soll ich es bitte ausliefern, wenn nicht in einem Plugin? Und das Plugin existiert ohnehin, weil dort zB noch ein Editor mitgeliefert wird, aber ich möchte eben zusätzlich, dass direkt unsere Abhängigkeiten im Plugin mitgeliefert werden und der Entwickler die nicht ständig selbst ins Projekt einbinden muss.

Wie gesagt, es MUSS ja irgendwie gehen, schließlich machen es ja einige Plugins von verschiedenen Anbietern. Die Frage ist nur wie. Hab eben nach ner halben Stunde Recherche nix brauchbares gefunden und hatte nicht die Muse alle möglichen Extension Points mal zu testen, deswegen frage ich hier.


----------



## KSG9|sebastian (21. Jan 2013)

Dann erweitere doch das Plugin im eine eigene Nature und sobald die Nature auf einem Projekt installiert wird setzt du den Buildpath entsprechend. Die lib kannst du in deinem Pluginprojekt ablegen, den Pfad darauf findest du über die Eclipse-API raus und dann musst du noch den Classpath setzen, was bei einem JavaProject kein großes Problem darstellt (siehe API-Doc). Anders machen es die anderen Plugins auch nicht. Die Jars liegen im plugins/features-Ordner und letztendlich wird entweder eine UserLibrary erzeugt und die JARs da reingepackt, die UserLibrary wird dann programmatisch als Abhänigkeit eingetragen, oder es werden die Libraries direkt zum Projekt hinzugefügt, als External Jar. Ich persönlich bin für den Ansatz mit der UserLibrary.

1. Programmatisch eine UserLibrary erstellen
2. Deine ausgelieferten JARs dort reinpacken
3. Beim installieren einer Nature für ein Projekt die UserLibrary als Abhängigkeit eintragen (programmatisch)


----------



## SoneccG (21. Jan 2013)

Was KSG9 da vorgeschlagen hat kann man übrigens bei Groovy sehr schön sehen.

https://github.com/groovy/groovy-ec...ovy/eclipse/core/model/GroovyRuntime.java#L78


----------



## Gonzo17 (21. Jan 2013)

Hm ja das kommt dem, was ich suche, auf jeden Fall schon sehr nahe.  Lieber wärs mir aber, wenn ich das komplett über Extension Points konfigurieren könnte. Mit der Project Nature geht das ja. Und ja, mal schauen, ob ich den Rest tatsächlich programmatisch machen muss, vielleicht klappts auch so.


----------



## Spacerat (21. Jan 2013)

Gonzo17 hat gesagt.:


> Ehm, das widerspricht sich ein wenig. Ich nehme ja stark an, dass das über irgendeinen Extension Point läuft, aber wie soll ich es bitte ausliefern, wenn nicht in einem Plugin? Und das Plugin existiert ohnehin, weil dort zB noch ein Editor mitgeliefert wird, aber ich möchte eben zusätzlich, dass direkt unsere Abhängigkeiten im Plugin mitgeliefert werden und der Entwickler die nicht ständig selbst ins Projekt einbinden muss.
> 
> Wie gesagt, es MUSS ja irgendwie gehen, schließlich machen es ja einige Plugins von verschiedenen Anbietern. Die Frage ist nur wie. Hab eben nach ner halben Stunde Recherche nix brauchbares gefunden und hatte nicht die Muse alle möglichen Extension Points mal zu testen, deswegen frage ich hier.


Äehmm, Natürlich widerspricht sich meine Aussage . Aber dein Ziel war es, ein Plugin zu entwickeln, mit welchem man Librarys in Eclipse zur Verfügung stellen kann. Der Witz ist doch, dass dieses "zur Verfügung stellen" von jedem Plugin selbst veranlasst (KSG9 hat bereits gesagt wie's geht) wird und man deswegen kein extra Plugin dafür benötigt. Hab' ich irgend etwas falsch verstanden?


----------



## Gonzo17 (21. Jan 2013)

Spacerat hat gesagt.:


> Äehmm, Natürlich widerspricht sich meine Aussage . Aber dein Ziel war es, ein Plugin zu entwickeln, mit welchem man Librarys in Eclipse zur Verfügung stellen kann. Der Witz ist doch, dass dieses "zur Verfügung stellen" von jedem Plugin selbst veranlasst (KSG9 hat bereits gesagt wie's geht) wird und man deswegen kein extra Plugin dafür benötigt. Hab' ich irgend etwas falsch verstanden?



Ja, hast du anscheinend.  Denn ich entwickle ein Plugin mit Project Nature, mitgeliefertem Editor usw und wollte eben außerdem noch die Abhängigkeiten mitliefern. Also bin und bleibe ich natürlich bei einem Plugin. Und diese Abhängigkeiten können logischerweise auch nicht irgendwo anders herkommen, weil das tatsächlich jars sind, die ich selbst produziere, beinhaltet eben meine Programmierschnittstelle/API.


----------

