So fügen Sie native Bibliothek zu "java.library.path" mit Eclipse -Start hinzu (anstatt sie zu überschreiben)

StackOverflow https://stackoverflow.com/questions/661320

Frage

Ich habe eine einheimische Bibliothek bekommen, die hinzugefügt werden muss Java.library.Path. Mit JVM -Argument -Djava.library.Path = Pfad ... Ich kann den Pfad so einstellen, wie ich will.

Mein Problem ist, dass meine andere Bibliothek (Pentaho Reporting) nach Schriftarten basierend auf der Standard -Java.library.Path (einschließlich Systemverzeichnisse usw.) sucht und die manuelle Einstellung den Standardpfad überschreibt.

Also: Wie kann ich hinzufügen Ein Pfadeintrag zum Standard -java.library.path anstatt ihn zu überschreiben (was mit -Djava.library.Path) zu überschreiben scheint)? (Ich möchte den Standardpfad nicht von Hand hinzufügen, was für den Einsatz nicht schön wäre.)

Bearbeiten: Entschuldigung für fehlende Details; Ich arbeite mit Eclipse. (Die Bereitstellung erfolgt mit JNLP und dort kann ich dort verwenden GeburtseliB unter Ressourcen)

War es hilfreich?

Lösung

Ich hatte dieses Problem vergessen ... Ich habe tatsächlich mit Eclipse gefragt, Entschuldigung, dass ich das ursprünglich nicht festgestellt habe. Und die Antwort scheint zu einfach zu sein (zumindest mit 3,5; wahrscheinlich auch mit älteren Versionen):

Argumente der Java -Konfiguration: VM Argumente:

-Djava.library.path="${workspace_loc:project}\lib;${env_var:PATH}"

Muss die Anführungszeichen nicht vergessen, sonst gibt es Probleme mit Räumen im Pfad.

Andere Tipps

Wenn Sie eine native Bibliothek hinzufügen möchten, ohne sich zu stören java.library.path In der Entwicklungszeit in Eclipse (um die Einbeziehung absoluter Pfade und das Hinzufügen von Parametern zu Ihrer Startkonfiguration zu vermeiden) können Sie den Pfad an den Ort der nativen Bibliotheken für jedes Glas in der JAR liefern Java -Build -Pfad Dialog unter Ort der nativen Bibliothek. Beachten Sie, dass der Name der nativen Bibliotheksdatei dem JAR -Dateinamen entsprechen muss. Siehe auch das detaillierte Beschreibung.

SWT steckt die notwendigen nativen DLLs in ein Glas. Suche nach "org.eclipse.swt.win32.win32.x86_3.4.1.v3449c.jar" für ein Beispiel.

Die DLLs müssen sich in der Wurzel des Glass befinden, das Glas muss signiert werden und die DLL muss mit Kontrollsumme im meta-inf/Manifest.mf angezeigt werden, damit die VM sie abholen kann.

In Fenstern wie diesem:

-Djava.library.path = "c:/mylibpath;%path%"

% Pfad% ist Ihr altes -djava.library.path

https://bugs.eclipse.org/bugs/show_bug.cgi?id=102239 stellt fest, dass in Eclipse's Launcher keine Substitutionsmechanik implementiert wird, zumindest keine Aufgabe, Juno zu veröffentlichen.

Daher ist es (fast) unmöglich, einen anderen Bibliotheksordner an java.library.Path anzuhängen oder vorzubereiten, wenn Eclipse ohne Vorkenntnis der Standardeinstellung gestartet wird.

Ich schrieb fast, weil es möglich sein sollte, Eclipse Startup zu lassen, den Inhalt von Java.library zu entwerfen. Der Müllkippe würde sich analysieren und dann als Eingabe für die Startung von Sonnenfinsternis angenommen, dh

#!/bin/bash
# get default value of java.library.path (somehow)
default_lib_path=$( start_dump_stop_eclipse_somehow )  

# now launch Eclipse
eclipse --launcher.appendVmargs \
         -vmargs \
         -Djava.library.path="/my/native/lib/folder:${default_lib_path}"

Kannst du das durchrufen, indem du anruft? System.load () Programmgesteuert, um Ihre native Bibliothek zu laden? Diese Methode (im Gegensatz zu System.loadlibrary ()) Ermöglicht Sie, einen absoluten Pfad anzugeben.

In UNIX -Systemen können Sie die Umgebungsvariable LD_LIBRARY_PATH anhängen. Unter Windows legt der JVM die Systemeigenschaft Java.library.Path automatisch auf Pfad fest. Wenn sich die DLL auf Ihrem Weg befindet, sind Sie festgelegt.

Fenster-> Einstellungen-> java-> installierte jres. Wählen Sie dann Ihren aktuellen JRE (JDK) und klicken Sie auf Bearbeiten. Füllen Sie die Standard -VM -Argumente aus: -djava.library.path =/usr/local/xuggler/lib. Fertig!

Die von Rob Elsner in einem der obigen Kommentare angebotene Lösung funktioniert perfekt (OSX 10.9, Eclipse Kepler). Man muss ihre zusätzlichen Wege an die von ":" getrennten Wege anhängen.

Sie können auch $ {System_property: java.library.Path} - Rob Elsner 22. November 10 um 23:01 verwenden

Der Name der nativen Bibliotheksdatei muss dem JAR -Dateinamen entsprechen. Dies ist sehr sehr wichtig. Bitte stellen Sie sicher, dass der Namen und den DLL -Namen gleich sind. Bitte sehen Sie den Beitrag von Fabian Steeg, mein Download für Jawin, mit verschiedenen Namen für DLL und JAR enthält. Es war Jawin.jar und Jawind.dll, beachten Sie extra 'D' im DLL -Dateinamen. Ich habe es einfach in jawin.dll umbenannt und als native Bibliothek in Eclipse festgelegt, wie in Post erwähnt. "http://www.eclipsezone.com/eclipse/forums/t49342.html"

Aus irgendeinem Grund konnte ich mehrere Ordner nicht zum Laufen bringen (nun für eine Weile, aber sobald ich mehr DLLs brauchte und mehr Ordner hinzufügte, keine mit weißen Räumen im Pfad). Ich kopierte dann alle benötigten DLLs in einen Ordner und hatte das als meine Java.library.Path und es hat funktioniert. Ich habe keine Erklärung - wenn jemand es tut, wäre es großartig.

Viele der vorhandenen Antworten gehen davon aus, dass Sie dies für ein bestimmtes Projekt festlegen möchten, aber ich musste es für Eclipse festlegen selbst Um die integrierte Authentifizierung für den SQL Server JDBC -Treiber zu unterstützen.

Dazu folgte ich diese Anweisungen zum Starten von Eclipse von der Java Commandline anstelle des normalen Launchers. Dann habe ich das Skript nur geändert, um mein Argument für -djava.library.Path zur Java -Befehlszeile hinzuzufügen.

Unter Windows habe ich festgestellt, dass das Wichtigste ist Starten Sie die Eclipse aus der Befehlszeile Anstatt aus dem Startmenü oder einer Abkürzung, sofern sich die native DLL in einem Verzeichnis auf Ihrem Weg befindet. Anscheinend stellt dies sicher, dass sich das richtige Verzeichnis auf dem Weg befindet.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top