So fügen Sie eine native Bibliothek zu „java.library.path“ mit dem Start von Eclipse hinzu (anstatt sie zu überschreiben)
Lesezeit: 6 Minuten
Tuko
Ich habe eine native Bibliothek, die hinzugefügt werden muss java.library.path. Mit JVM-Argument -Djava.library.path=Pfad… Ich kann den Pfad einstellen, wie ich will.
Mein Problem ist, dass meine andere Bibliothek (Pentaho Reporting) Schriftarten basierend auf dem Standard java.library.path (einschließlich Systemverzeichnissen usw.) durchsucht und die manuelle Einstellung den Standardpfad überschreibt.
Also: Wie kann ich hinzufügen einen Pfadeintrag zum standardmäßigen java.library.path, anstatt ihn zu überschreiben (was mit -Djava.library.path zu geschehen scheint)? (Ich möchte den Standardpfad nicht von Hand hinzufügen, was für die Bereitstellung nicht schön wäre.)
EDIT: Entschuldigung für fehlende Details; Ich arbeite mit Eclipse. (Das Deployment erfolgt mit JNLP und dort kann ich verwenden nativelib unter Ressourcen)
Bitte sehen Sie stattdessen die akzeptierte Antwort auf diese Frage – für mich ist es viel besser: stackoverflow.com/questions/957700/…
– laher
19. Juni 11 um 23:03 Uhr
Die Frage „Wie füge ich eine native Bibliothek zu ..“ hinzu, ist verwirrend. Es geht wahrscheinlich darum, einen weiteren “Bibliothekspfad” hinzuzufügen (anzuhängen oder voranzustellen), dh unter der Annahme, dass Eclipse standardmäßig so etwas wie java.library.path=path1:path2:path3 anzeigt, ist die Frage, wie Eclipse gestartet wird und in java.library landet .path=my/lib/folder:path1:path2:path3
– wh81752
21. Februar 14 um 13:20 Uhr
Hatte dieses Problem vergessen … Ich habe eigentlich bei Eclipse gefragt, sorry, dass ich das ursprünglich nicht gesagt habe. Und die Antwort scheint zu einfach zu sein (zumindest mit 3.5; wahrscheinlich auch mit älteren Versionen):
Argumente der Java-Laufkonfiguration: VM-Argumente:
Anführungszeichen nicht vergessen, sonst gibt es Probleme mit Leerzeichen in PATH.
Wenn es zwei gemeinsam genutzte Bibliotheken gibt, die voneinander abhängig sind, funktioniert dies nicht. Die erste wird von der Java-Laufzeitumgebung gefunden, die zweite jedoch vom dynamischen Ladeprogramm des Systems aufgelöst. Die einzige Lösung, die ich gefunden habe, besteht darin, LD_LIBRARY_PATH festzulegen.
– Kevin Cline
27. November 12 um 22:52 Uhr
Die Antwort von @Touko passt nicht zur ursprünglichen Frage, bei der es um das Anhängen oder Voranstellen eines nativen Bibliotheksordners geht. Zumindest unter Mac OS 10.8 hat weder $PATH noch $LD_LIBRARY_PATH noch ${workspace_loc:project}lib etwas mit dem Standardwert zu tun. Auf meinem Mac ist der Standardwert beispielsweise $HOME/Library/Java/Extensions:/Library/Java/Extensions:/Network/Library/Java/Extensions:/System/Library/Java/Extensions:/usr/lib/java :.
– wh81752
21. Februar 2014 um 13:30 Uhr
Wenn Sie TestNG in Eclipse verwenden, müssen Sie die TestNG-Laufkonfiguration bearbeiten: – Wählen Sie im Fenster Run Configurations Ihre TestNG-Zielkonfiguration aus. – Wählen Sie die Registerkarte “Umgebung” – Fügen Sie eine PATH-Variable hinzu und legen Sie ihren Wert auf Ihr Ziel fest – Belassen Sie die standardmäßige Umschaltfläche “Umgebung an native Umgebung anhängen”.
– Philipp
21. Februar 14 um 16:29 Uhr
Kann ich ein Beispiel bekommen.
– basiskarl
24. November 14 um 17:55 Uhr
@kevincline würde es dir etwas ausmachen zu erläutern, warum genau es in diesem Fall nicht funktioniert? Ich bin gerade auf dieses Problem gestoßen und versuche zu verstehen, was an dieser Lösung falsch ist.
– Anula
10. Februar 15 um 13:11 Uhr
Fabian Steg
Wenn Sie eine native Bibliothek hinzufügen möchten, ohne zu stören java.library.path Zur Entwicklungszeit in Eclipse (um zu vermeiden, absolute Pfade einzufügen und Parameter zu Ihrer Startkonfiguration hinzufügen zu müssen), können Sie den Pfad zum Speicherort der nativen Bibliotheken für jedes Jar in der angeben Java-Erstellungspfad Dialog unter Ort der einheimischen Bibliothek. Beachten Sie, dass der Name der nativen Bibliotheksdatei dem Namen der Jar-Datei entsprechen muss. Siehe auch dies detaillierte Beschreibung.
-1. Sie gehen davon aus, dass der Endbenutzer die Anwendung von einer IDE aus ausführt, was unwahrscheinlich ist.
– finnw
24. Januar 10 um 19:38 Uhr
@finnw Ich verstehe deinen Punkt. Ich fand die Frage, als ich nach einer Lösung suchte, wie man während der Entwicklung eine native Bibliothek in der IDE hinzufügt, ohne sie zu überschreiben java.library.path und kam zurück, nachdem ich die Lösung woanders gefunden hatte. Ich werde meine Antwort bearbeiten, um das klarer zu machen.
– Fabian Steeg
24. Januar 10 um 23:43 Uhr
Eigentlich arbeite ich mit Eclipse, obwohl ich es bei der Frage nicht erwähnt habe.
– Tuko
22. Februar 10 um 8:38 Uhr
Dies funktioniert in der aktuellen Version von Eclipse (Luna) eigentlich nicht, da das Festlegen der Eigenschaft java.library.path überschreibt, wie der Benutzer es in der Frage als Problem beschreibt.
– Alex N.
12. Mai ’15 um 15:31 Uhr
Aaron Digulla
SWT fügt die erforderlichen nativen DLLs in ein JAR ein. Suchen Sie für ein Beispiel nach “org.eclipse.swt.win32.win32.x86_3.4.1.v3449c.jar”.
Die DLLs müssen sich im Stammverzeichnis der JAR befinden, die JAR muss signiert sein und die DLL muss mit Prüfsumme in der META-INF/MANIFEST.MF erscheinen, damit die VM sie abholen kann.
Wie kann ich das mit NetBeans machen?
– Maciek Sawicki
4. Dez. 09 um 6:48
AFAIK, NetBeans verwendet Ant, um das Projekt zu erstellen. Lesen Sie die Dokumentation für Ant, wie Sie signierte JARs erstellen und Dinge wie DLLs in das Manifest einfügen.
– Aaron Digulla
4. Dez. 09 um 8:20
Wie stelle ich es ein, um die .dll in Eclipse hinzuzufügen?
@AaronDigulla Schlagen Sie vor, dass DLL immer auf diese Weise angehängt werden kann? Ich dachte, dass es nur so etwas sucht java.library.path. Schlagen Sie vor, dass nur die Wurzel von gesucht wird? jar ?
– Benutzer6023611
9. März 17 um 20:11 Uhr
andy stiefel
Unter Windows so:
-Djava.library.path=”C:/MyLibPath;%PATH%”
%PATH% ist Ihr alter -Djava.library.path
Kannst du das umgehen, indem du anrufst System.load() programmgesteuert, um Ihre native Bibliothek zu laden? Diese Methode (im Gegensatz zu System.loadLibrary()) können Sie einen absoluten Pfad angeben.
Bitte erläutern Sie, wie Sie System.load() programmgesteuert aufrufen würden, wenn Sie Eclipse starten.
– wh81752
21. Februar ’14 um 14:00 Uhr
geowa4
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 also auf Ihrem PATH befindet, sind Sie bereit.
Bitte erläutern Sie, wie Sie System.load() programmgesteuert aufrufen würden, wenn Sie Eclipse starten.
Daher ist es (fast) unmöglich, beim Start von Eclipse ohne vorherige Kenntnis der Standardeinstellung einen anderen Bibliotheksordner an java.library.path anzuhängen oder voranzustellen.
Ich habe fast geschrieben, weil es möglich sein sollte, Eclipse starten zu lassen, den Inhalt von java.library.path auszugeben und Eclipse in einem Befehl zu stoppen. Der Dump würde dann analysiert und dann als Eingabe zum Starten von Eclipse verwendet, 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}"
.
7589300cookie-checkSo fügen Sie eine native Bibliothek zu „java.library.path“ mit dem Start von Eclipse hinzu (anstatt sie zu überschreiben)yes
Bitte sehen Sie stattdessen die akzeptierte Antwort auf diese Frage – für mich ist es viel besser: stackoverflow.com/questions/957700/…
– laher
19. Juni 11 um 23:03 Uhr
Die Frage „Wie füge ich eine native Bibliothek zu ..“ hinzu, ist verwirrend. Es geht wahrscheinlich darum, einen weiteren “Bibliothekspfad” hinzuzufügen (anzuhängen oder voranzustellen), dh unter der Annahme, dass Eclipse standardmäßig so etwas wie java.library.path=path1:path2:path3 anzeigt, ist die Frage, wie Eclipse gestartet wird und in java.library landet .path=my/lib/folder:path1:path2:path3
– wh81752
21. Februar 14 um 13:20 Uhr