Ich habe mir schon seit einiger Zeit den Kopf darüber gebrochen und kann keine Lösung für dieses Problem finden:
Ich habe eine Eclipse RCP-Anwendung, die eine benutzerdefinierte Bibliothek verwendet, die als jar verpackt ist. Vom Plugin aus rufe ich eine Methode im Jar auf.
Innerhalb dieser Methode erhalte ich eine Ressource mit this.class.getResource(relPath)
, während relPath
ein fest codierter relativer Pfad zu einer Datei ist, die ich brauche. Dies gibt mir eine URL
zurück, die ich verwenden kann, um eine File
zu konstruieren.
Das funktioniert jetzt einwandfrei, wenn ich diese Methode nicht aus dem Plugin herausrufe, sondern aus einem einfachen Java-Programm.
Der Unterschied: Der Klassenlader von Eclipse RCP gibt URL
des Protokolls bundleresource://
zurück, was nicht von File
unterstützt wird, während beim Ausführen eines einfachen Java-Programms ein file://
-URL zurückgegeben wird. co_de%.
Ich kenne die File
-Klasse des Eclipse SDK (die buntresource-URLs in Datei-URLs auflöst), aber ich kann sie nicht in der Bibliothek verwenden, weil ich sie nicht an die Eclipse RCP-Plattform binden möchte - Es sollte möglich sein, diese Bibliothek auch aus Nicht-Eclipse-RCP-Quellen zu verwenden.
Jeder eine Idee, wie ich diese Ressource aus einem relativen Pfad auf eine Weise laden kann, die funktioniert, wenn die Methode von einem Eclipse RCP-Plugin oder einem anderen Client aufgerufen wird?
Ich muss ein FileLocator
im Verzeichnis dieses relativen Pfades erstellen, um nach Dateien darin zu suchen. Ich bin vollkommen auf diesem ... festgefahren.
UPDATE : Wenn es eine andere Möglichkeit gibt als Datei # list () um Verzeichnisinhalte zu bekommen, würde mir das schon helfen ..
alle Hinweise sehr geschätzt,
Könnten Sie die Abhängigkeit nicht einfach invertieren? Das heißt, Ihr Modul, das die Ressource als URL abruft, definiert eine Schnittstelle
%Vor%und Sie können eine Standardimplementierung verwenden
%Vor%Im Falle von Eclipse soll dieser Standard-Locator durch
ersetzt werden %Vor%Nun hat Ihre Bibliothek keine Abhängigkeiten zu Eclipse und Sie können weiterhin den FileLocator verwenden. Da du keine bunfressresource-URLs ohne Eclipse bekommst, sollte das funktionieren.
Prost, Jens
Es ist nicht möglich, Dateien in JAR-Dateien mit Methoden von Class
aufzuzählen. Sie müssen entweder resourcelist
file erstellen, das alle Ihre Ressourcennamen enthält, oder JAR-Datei wie zip-Archiv öffnen und Dateien auflisten, wie im zip-Archiv. File
class kann keine anderen Protokolle als file://
verarbeiten. Wenn sich Ihre Ressource in der JAR-Datei befindet, sollten Sie Url
class verwenden und den Stream mit der Methode Url.openSteram
abrufen, um Dateiinhalte zu erhalten.
UPD beim Ausführen einfacher Java-Anwendungen: Sie packen es wahrscheinlich nicht in die JAR-Datei. Ihre Klassen und Ressourcen werden also im Dateisystem und nicht im Archiv gespeichert. Deshalb erhalten Sie file://
Protokoll. Wenn Sie in die JAR-Datei packen, ist das Protokoll nicht file://
, es wird jar://
(nicht sicher über den genauen Protokollnamen).
Tags und Links java url eclipse-rcp file