2016-03-22 13 views
0

Ich habe einige Java-Code, der eine vorhandene native Anwendung wickelt und führt die folgenden Schritte aus:Eclipse-: eine Umgebungsvariable einstellen, die einen Ordner in einem Plugin enthalten verweist

  1. nimmt eine Eingabe von dem Benutzer
  2. ein Führt Bereitstellen native Anwendung als Parameter, welche die in Schritt genommen Eingang 1
  3. in Schritt 2 hergestellt führt einige weitere Operationen an den Ausgabedateien

die native Anwendung in Schritt 2 benötigt einige dynamische Bibliotheken. Unter Run Configurations -> Environment habe ich die folgenden Variablen gesetzt, um auf die Bibliotheken zu verweisen.

DYLD_LIBRARY_PATH = ${project_loc}/path/to/libs 
DYLD_FALLBACK_LIBRARY_PATH = ${project_loc}/path/to/libs 

Und bis jetzt funktioniert alles. Jetzt habe ich meinen Code und die vorhandene native Anwendung als Eclipse-Plugin gepackt. Jedes Mal, wenn ich versuche, den Code innerhalb des Plugin ich folgende Fehlermeldung erhalten auszuführen:

dyld: Library not loaded: libsrcml.dylib 
Referenced from: workspace/Project/src/nativeApp 
Reason: image not found 

Zu meinem Verständnis, geschieht dies, weil die Umgebungsvariablen ich vorher Referenz {$ project_loc} gesetzt hatte, das der Ort, wo meine Eclipse Projekt wurde gespeichert. Jetzt ist mein Code nicht mehr in diesem Projekt enthalten, aber er ist in einem Plugin enthalten, so dass der Pfad für die Variablen nicht mehr funktioniert. Frage ist, wie kann ich einen Pfad festlegen, der auf einen Ordner in meinem Plugin verweist? Oder ist es möglich, diese Variablen irgendwie dynamisch in meinem Java-Code zu laden?

+0

Sie müssen sich wahrscheinlich den Eintrag 'Bundle-NativeCode' im Plugin MANIFEST.MF ansehen. –

Antwort

0

Die path variables werden verwendet, um einen festen Speicherort im Dateisystem anzugeben.

Um eine Ressource in einem Plugin zu identifizieren, würde ich die URL

Fall 1 verwenden: Platform.getBundle("").getEntry("")

Bundle bundle = Platform.getBundle("your.bundle.id"); 
URL url = bundle.getEntry("yourDir/yourFile.txt"); 
File f = new File(FileLocator.resolve(url).toURI()); 

Fall 2: Plattform URL zu Ihrer Ressource:

url = new URL("platform:/plugin/your.bundle.id/yourDir/yourFile.txt"); 
File f = new File(FileLocator.resolve(url).toURI()); 

Dank Vogella für diesen Tipp.

jedoch für Bibliotheken in Ihrem Plug-in ist es ein bisschen anders, als System.loadLibrary("libname") muss in der Lage sein, Ihre lib zu lösen.

Wenn Sie native Bibliotheken in Ihrem Plug-in versenden und verwenden, verpacken Sie Ihr Plugin bitte als Verzeichnis und nicht als komprimierte JAR-Datei. So Ihre Plug-In-MANIFEST.MF bearbeiten und Eclipse-BundleShape: dir

Eclipse-BundleShape: dir 

Dann stellen Sie Ihre Plug-in als Ordner verpackt werden, und dann ist es in Ihrer Verantwortung, die Interaktion Ihrer nativen Bibliotheken zu machen. Dies hängt normalerweise davon ab, wie die nativen Bibliotheken miteinander verknüpft sind und wie Ihr Java-Native-Framework die Suchpfade einstellt.

Meine einfache Lösung,, setzt alle nativen Bibliotheken in den Stammordner der ausführbaren Datei von Eclipse, das ist das Java-Ausführungsverzeichnis, so dass ich diesen Pfad mit dem "Benutzer.dir“Umgebungsvariablen wie folgt:

System.getProperty("user.dir"); 

Dann, wenn alle Eingeborenen im selben Ordner befinden, können sie sich ohne Probleme verweisen

Bitte, auch diese Ressourcen überprüfen.

+0

Wenn ich mir die von Ihnen bereitgestellten Ressourcen anschaue, gelang es mir, die Bibliothek so zu bündeln, dass 'System.loadLibrary (" libname ")' es schafft, auf sie zu verweisen. Es scheint jedoch, dass die native App es immer noch nicht finden kann, da ich die Fehlermeldung 'dyld: Bibliothek nicht geladen: libsrcml.dylib Grund: Bild nicht gefunden' erhalten habe. Kannst du erklären, was du mit _the Root-Ordner der ausführbaren Eclipse-Datei meinst und wie du von dort auf die libs referenzierst? –

+0

Der Stammordner der ausführbaren Eclipse-Datei ist das Verzeichnis mit der Datei eclipse.exe. Zur Entwicklungszeit ist dies der Ordner, der Ihre Eclipse-IDE enthält. Wenn Sie jedoch ein Eclipse RCP-Produkt erstellen und versenden, ist dies der Ordner, der die EXE-Datei "product" enthält. Sag mir, ob das klar ist, damit ich die Antwort aktualisieren kann. – psuzzi

+0

Es ist klar, aber ich würde gerne eine Lösung finden, die auch funktioniert, wenn mein Plugin in einer Standard-Eclipse-Installation verwendet wird. –

Verwandte Themen