Bundle native Abhängigkeiten lauffähig .Glas mit Maven
Habe ich ein Projekt geschafft, in den Maven, der hat einige nativen Abhängigkeiten (LWJGL).
Funktioniert alles einwandfrei in der Entwicklung, aber das will ich jetzt einrichten, Maven, so dass Sie bauen eine runnable .jar-Datei, die ich weitergeben können. Insbesondere will ich, dass es sehr einfach für Benutzer, um die app auszuführen, ohne Durcheinander herum mit Bibliothek-Pfade "oder" unpacking native libraries, etc.
Derzeit bin ich in der Lage zu bauen .jar-Datei enthält alle Abhängigkeiten, aber wenn ich ihn dann (wenig überraschend), habe ich eine unbefriedigte link-Fehler:
Exception in thread "main" java.lang.UnsatisfiedLinkError: no lwjgl in java.libr
ary.path
at java.lang.ClassLoader.loadLibrary(Unknown Source)
at java.lang.Runtime.loadLibrary0(Unknown Source)
at java.lang.System.loadLibrary(Unknown Source)
at org.lwjgl.Sys$1.run(Sys.java:73)
at java.security.AccessController.doPrivileged(Native Method)
at org.lwjgl.Sys.doLoadLibrary(Sys.java:66)
at org.lwjgl.Sys.loadLibrary(Sys.java:95)
at org.lwjgl.Sys.<clinit>(Sys.java:112)
at org.lwjgl.opengl.Display.<clinit>(Display.java:132)
at glaze.TestApp.start(TestApp.java:10)
at glaze.TestApp.main(TestApp.java:31)
Offensichtlich kann ich machen, damit es funktioniert, indem Sie manuell die Installation der nativen Bibliotheken und ausführen der jar mit java -Djava.library.path=/path/to/libs
aber das ist nicht etwas, was ich erwarten kann, meinen Benutzer zu tun.
Hier ist die pom.xml falls es relevant ist: https://github.com/mikera/glaze/blob/master/pom.xml
Ist es möglich, Maven, so dass es wird ein runnable .jar, enthält die native Abhängigkeiten und wird erfolgreich ausgeführt, wenn doppelt geklickt?
- Was genau ist das problem? Können Sie Beispiele zeigen, die funktionieren nicht wie erwartet?
- Kein OS ich weiss, Griffe-Glas (oder zip) Dateien als äquivalent zu den Datei-Systeme. So müssen Sie zum extrahieren, dass die native Bibliothek, bevor Sie geladen werden.
- In der Vergangenheit habe ich beigelegt zur Montage einer GLAS - getrennt von Ihren Ressourcen und wie start-up-Skript setzt die notwendigen system-Eigenschaften (D. H. zu Punkt
java.library.path
amresources
- Verzeichnis).
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist ein code, die ich verwendet, um zu verwenden, um zu laden
dll
oderso
Bibliotheken, die gebündelt in den Topf.Den Bibliotheken, die Hinzugefügt werden müssen, wie die Ressourcen. Wir verwendet, maven und setzen Sie Sie in dieser Hierarchie:
Die gemeinsam genutzten Bibliotheken werden ausgepackt, um das tmp-Verzeichnis für die Plattform und haben auch einen temporären Namen zu, wenn entpackt. Dies ist, lassen verschiedene Prozesse, laden der dll/so, ohne Freigabe des eigentlichen extrahierten dll/so seit dem Auspacken könnten existierende überschreiben, wenn mit dem gleichen Namen (mit sehr merkwürdigen Verhalten auf einigen Plattformen, wenn die Datei ersetzt wurde).
Die Datei ist auch eingestellt zu haben
deleteOnExit
gesetzt, aber das funktioniert nicht unter windows, soweit ich weiß.NativeLoader.java
Die Bibliotheken werden geladen, indem eine Instanz der
NativeLoader
und dann durch den AufrufloadLibrary("thelibrary")
ohne die os-spezifische Präfixe und Erweiterungen.Dies funktionierte gut für uns, aber Sie haben zum hinzufügen von shared libraries manuell auf die unterschiedlichen Ressourcen-Verzeichnisse und erstellen Sie dann das Glas.
Ich weiß, dass einige code in dieser Klasse vielleicht seltsam oder veraltet, aber im Hinterkopf kahl, dass dies ist der code, den ich schrieb vor einigen Jahren, und es hat die Arbeit wirklich gut.
System.load
vor. Schön! Ich wollte schreiben, eine Antwort, an der Manipulation derjava.library.path
(das ist no mean feat), aber Sie brauchen nicht zu tun, denn Sie können einfach laden Sie die Datei direkt.Haben Sie versuchen, zu verwenden
maven-assembly-plugin
hier ist ein Beispiel :Sowie für Ihre native Abhängigkeiten, die Sie verwenden möchten, können
Bundle-NativeCode
in Ihrer manifest-Datei. Sehen http://wiki.osgi.org/wiki/Bundle-NativeCode.Eventuell möchten Sie auch einen Blick auf die
maven-bundle-plugin
: http://felix.apache.org/site/apache-felix-maven-bundle-plugin-bnd.html erzeugen mit Maven.java -jar your_jar_with_deps.jar
Befehl ?Hier ist das plugin müssen Sie in Ihrem
pom.xml
zu laufen, Ihr zu bauen, mit den erforderlichen Parameter "run", die Sie erwähnt:Dann führen Sie Ihre LWJGL-Programm mit