Ich habe eine native Bibliothek, die zu java.library.path hinzugefügt werden muss . Mit dem JVM-Argument -Djava.library.path = path ... kann ich den Pfad wie gewünscht festlegen.
Mein Problem ist, dass meine andere Bibliothek (Pentaho-Berichterstellung) Schriftarten basierend auf dem Standardpfad java.library.path (einschließlich Systemverzeichnisse usw.) durchsucht und die manuelle Einstellung den Standardpfad überschreibt.
Also: Wie kann ich hinzufügen , einen Pfad Eintrag auf den Standard java.library.path anstatt sie zu überschreiben (die mit -Djava.library.path gemacht zu sein scheint)? (Ich möchte den Standardpfad nicht manuell hinzufügen, was für die Bereitstellung nicht hilfreich wäre.)
EDIT: Entschuldigung für fehlende Details; Ich arbeite mit Eclipse. (Die Bereitstellung erfolgt mit JNLP und dort kann ich nativelib unter Ressourcen verwenden. )
quelle
Antworten:
Hatte dieses Problem vergessen ... Ich habe tatsächlich mit Eclipse gefragt, tut mir leid, dass ich das ursprünglich nicht angegeben habe. Und die Antwort scheint zu einfach zu sein (zumindest mit 3.5; wahrscheinlich auch mit älteren Versionen):
Argumente der Java-Ausführungskonfiguration: VM-Argumente:
Die Anführungszeichen dürfen nicht vergessen werden, da sonst Probleme mit Leerzeichen in PATH auftreten.
quelle
Wenn Sie eine native Bibliothek hinzufügen möchten, ohne die
java.library.path
Entwicklungszeit in Eclipse zu beeinträchtigen (um zu vermeiden, dass absolute Pfade eingeschlossen werden und Parameter zu Ihrer Startkonfiguration hinzugefügt werden müssen), können Sie den Pfad zum Speicherort der nativen Bibliotheken für jedes Jar im Java Build angeben Pfad Dialog unter india Bibliothek Lage . Beachten Sie, dass der Name der nativen Bibliotheksdatei dem Namen der Jar-Datei entsprechen muss. Siehe auch diese detaillierte Beschreibung .quelle
java.library.path
und kam zurück, nachdem ich die Lösung an anderer Stelle gefunden hatte. Ich werde meine Antwort bearbeiten, um das klarer zu machen.SWT fügt die erforderlichen nativen DLLs in eine JAR ein. Suchen Sie nach "org.eclipse.swt.win32.win32.x86_3.4.1.v3449c.jar" für ein Beispiel.
Die DLLs müssen sich im Stammverzeichnis der JAR befinden, die JAR muss signiert sein und die DLL muss mit einer Prüfsumme in META-INF / MANIFEST.MF angezeigt werden, damit die VM sie abrufen kann.
quelle
java.library.path
. Schlagen Sie vor, dass es nur Wurzel von suchtjar
?In Windows wie folgt:
-Djava.library.path = "C: / MyLibPath;% PATH%"
% PATH% ist Ihr alter -Djava.library.path
quelle
Können Sie dies umgehen, indem Sie System.load () programmgesteuert aufrufen , um Ihre native Bibliothek zu laden? Mit dieser Methode können Sie (im Gegensatz zu System.loadLibrary () ) einen absoluten Pfad angeben.
quelle
https://bugs.eclipse.org/bugs/show_bug.cgi?id=102239 besagt, dass in Eclipse's Launcher keine Substitutionsmechanik implementiert ist, zumindest keine bis zur Veröffentlichung von Juno.
Daher ist es (fast) unmöglich, einen anderen Bibliotheksordner an java.library.path anzuhängen oder vorzuhängen, wenn Eclipse ohne vorherige Kenntnis der Standardeinstellung gestartet wird.
Ich habe fast geschrieben, weil es möglich sein sollte, Eclipse starten zu lassen, den Inhalt von java.library.path zu sichern und Eclipse in einem Befehl zu stoppen. Der Speicherauszug wird analysiert und dann als Eingabe für den Start von Eclipse verwendet, d. H.
quelle
In UNIX-Systemen können Sie an die Umgebungsvariable LD_LIBRARY_PATH anhängen. Unter Windows setzt die JVM die Systemeigenschaft java.library.path automatisch auf PATH. Wenn sich die DLL auf Ihrem Pfad befindet, sind Sie fertig.
quelle
Fenster-> Einstellungen-> Java-> Installierte JREs. Wählen Sie dann Ihre aktuelle JRE (JDK) und klicken Sie auf Bearbeiten. Füllen Sie die Standard-VM-Argumente aus: -Djava.library.path = / usr / local / xuggler / lib. Getan!
quelle
Die von Rob Elsner in einem der obigen Kommentare angebotene Lösung funktioniert einwandfrei (OSX 10.9, Eclipse Kepler). Man muss ihre zusätzlichen Pfade an die durch ":" getrennten anhängen.
quelle
Der Dateiname der nativen Bibliothek muss dem Jar-Dateinamen entsprechen. Das ist sehr sehr wichtig. Bitte stellen Sie sicher, dass der Name des JAR und der Name der DLL identisch sind. Siehe auch den Beitrag von Fabian Steeg. Mein Download für jawin enthielt verschiedene Namen für dll und jar. Es war jawin.jar und jawin d .dll, notiere 'd' im Namen der DLL-Datei. Ich habe es einfach in jawin.dll umbenannt und als native Bibliothek in Eclipse festgelegt, wie im Beitrag " http://www.eclipsezone.com/eclipse/forums/t49342.html " erwähnt.
quelle
Aus irgendeinem Grund konnte ich nicht mehrere Ordner zum Laufen bringen (nun, es dauerte eine Weile, aber sobald ich mehr DLLs benötigte und mehr Ordner hinzufügte, keine mit Leerzeichen im Pfad). Ich habe dann alle benötigten DLLs in einen Ordner kopiert und hatte das als java.library.path und es hat funktioniert. Ich habe keine Erklärung - wenn jemand das tut, wäre es großartig.
quelle
Viele der vorhandenen Antworten setzen voraus, dass Sie dies für ein bestimmtes Projekt festlegen möchten, aber ich musste es für Eclipse selbst festlegen , um die integrierte Authentifizierung für den SQL Server-JDBC-Treiber zu unterstützen.
Zu diesem Zweck habe ich diese Anweisungen zum Starten von Eclipse über die Java-Befehlszeile anstelle des normalen Startprogramms befolgt . Dann habe ich dieses Skript einfach geändert, um mein Argument -Djava.library.path zur Java-Befehlszeile hinzuzufügen.
quelle
java.library.path
wird mit den Werten der oben genannten Variablen auf der entsprechenden Plattform initialisiert.Dies sollte auf jeder IDE funktionieren.
Sie können testen, ob der Wert Ihren Erwartungen entspricht, indem Sie aufrufen
java -XshowSettings:properties
quelle
Unter Windows habe ich festgestellt, dass es wichtig ist, Eclipse über die Befehlszeile und nicht über das Startmenü oder eine Verknüpfung zu starten , vorausgesetzt, die native DLL befindet sich in einem Verzeichnis in Ihrem PATH. Anscheinend stellt dies sicher, dass sich das richtige Verzeichnis auf dem Pfad befindet.
quelle