# Classpath in PlugIns



## dzim (10. Okt 2008)

Hallo zusammen,

ich hatte in letzter Zeit nicht gerade viel mit RCP zu tun, nun aber gibt es wieder ein paar Aufgaben dahingehend...
Und promt stolperten wir über ein Problem:
Wie haben hier ein paar Projekte, die noch aus der Zeit vor einer Integrierung in RCP stammen, diese in Eclipse zu RCP-Projekten umzuwandeln ist kein Problem, wurde auch schon lange gemacht und lief auch soweit erfolgreich.
Die beiden verwendeten Projekte besitzen im weitesten Sinne Textdateien im Classpath, die zur Laufzeit geladen werden sollen. Beide Projekte verwenden so xml-basierte Property-Dateien um verschiedene Einstellungen vorzunehmen.
So ist in einer ein DB-Zugang definiert, in anderen spezielle String-Ersetzungen, u.s.w.
Bislang hat alles gut funktioniert, wenn er diese Konfigurationen laden sollte - so weit so gut.
Nun aber sollen OpenOffice-Templates und zugehörige XSLT-Stylesheets für die content.xml und styles.xml geladen werden, die in einem separaten source-Folder liegen, geladen werden und hier geht nix mehr.
Der Eclipse-Classloader findet sie entweder nicht, oder aber ist SO dumm, dass er versucht bei Verwendung der .getResource().getFile()-Methode absolut von der Verzeichnisstruktur zum user (Linux) loszuwandern und nicht den Classpath mit einzubeziehen.
Allmählich haben wir aufgeben - es ist zu verrückt werden: Wenn man das Plug In als das urpsrüngliche Konsolenprogramm, dass es vor der Umwandlung in ein Plug In war und als solches immer noch verwendet wird, startet, findet der Clasloader die gesuchten Templates und Stylesheets im Classpath - als Plug In nicht.

Mir ist klar, das Eclipse RCP - oder bereits Equinox - einen eigenen Classloader pro Plug In nutzt, aber das erklärt nicht, warum er die gesuchten Objekte nicht findet.

Gestern kam mir der Gedanke, ob es vielleicht daran liegt, das das Plug In keinen Aktivator hat und somit vielleicht Teile des Plug Ins einfach nicht geladen wurde - aber sicher bin ich mir da nicht.

Kennt einer das Problem und weiß, wenn ja, wie es sich beheben lässt? Oder weiß jemand ob ich prinzipiell mit dem Activator-Gedanken recht haben könnte und wie der Activator aufgebaut sein muss, damit diese Dateien angesprochen werden können? Was muss denn alles im Activator aktiviert werden, damit sich solche Probleme evtl. vermeiden lassen (bislang reichte der Standard-Activator der RCP-PlugIn-Templates von Eclipse, an die ich maximal meine Message-Console rangehängt hab)?

Grüße und Danke!
Daniel


----------



## Wildcard (10. Okt 2008)

getResource().getFile()? Wenn du deine Anwendung damals als jar verpackt hast, konnte das auch da schon nicht funktionieren, weil es keine Datei ist sondern ein Jar-Entry.
Bei Eclipse PlugIns lädt man resourcen üblicherweise über den FileLocator, aber wenn du getResource(AsStream) *richtig* verwendest, funktioniert es ebenfalls.


----------



## dzim (10. Okt 2008)

Ich weiß, das es mit der .getResourceAsStream() aus jar-Files herraus klappt - so lade ich ja auch die Properties.
Problem ist folgendes: Das Program, das diese Templates u.s.w. verwendet, ist wie gesagt schon etwas älter - wurde in letzter Zeit durch mich zwar extrem aufgebohrt, aber das Lesen der Templates erfolt über File-Objekte (und daraus werden FileOutputStreams und ZipOutputStreams geöffnet).
Gleichzeitig öffnen wir ein ZipFile aus dem Template, um die Entries auszulesen.

Mein Problem ist die Umwandlung von Input- nach OutputStream...

Ich steh da gerade wirklich vor nem Problem, das ich zwar erkenne, aber nicht weiß, wie es zu beheben ist - und getResource().getFile() brachte mir eben ein File-Objekt - um mehr hab ich mich bis zu dem oben genannten Problem nicht gekümmert, da es auf der Konsole tat, was es sollte...


----------



## Wildcard (10. Okt 2008)

Du musst aber in jedem Fall weg von den File Objekten, da es in einem Archiv keine Dateien geben kann, ein Archiv *ist* eine Datei.


----------



## dzim (10. Okt 2008)

Ja, das ist mir mittlerweile - leider - bewusst geworden.
Unglücklichereise hilft mir das nicht bei dem Problem der ZipFiles...


----------



## Wildcard (10. Okt 2008)

dzim hat gesagt.:
			
		

> Unglücklichereise hilft mir das nicht bei dem Problem der ZipFiles...


ZipInputStream?


----------



## dzim (10. Okt 2008)

stimmt - da ich mich mit der zip API noch nie viel rumschlagen musste (hab nur bisher bereits programmiertes weiterverwendet oder angepasst) wusste ich davon noch nichts und werde es auf InputStreams umstellen

Danke


----------



## dzim (10. Okt 2008)

Ok - nachdem ich ein paar Klassen anpassen musste (warum muss sich so was immer durch die Gegend ziehen) funktioniert es.
Danke nochmal!


----------

