Datei und bunerresource: // URLs

8

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,

    
quaylar 27.01.2012, 08:50
quelle

2 Antworten

12

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

    
Jens 15.02.2012, 17:58
quelle
0

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).

    
michael nesterenko 28.01.2012 21:14
quelle

Tags und Links