Bundle native dépendances dans l'exécutable .jar avec Maven

J'ai un projet géré en Maven qui a une certaine natif dépendances (LWJGL).

Tout fonctionne bien dans le développement, mais maintenant je veux configurer Maven pour qu'il fera construire un exécutable .fichier jar que je peux redistribuer. En particulier, je veux qu'il soit très facile pour les utilisateurs d'exécuter l'application sans avoir à perdre avec une bibliothèque des chemins ou le déballage des bibliothèques natives etc.

Actuellement, je suis en mesure de construire une .fichier jar qui contient toutes les dépendances, mais si je le lance ensuite (sans surprise) je suis un insatisfait erreur de lien:

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)

Évidemment, je peux le faire fonctionner en installant manuellement les bibliothèques natives et l'exécution du pot avec java -Djava.library.path=/path/to/libs mais ce n'est pas quelque chose que je peux attendre de mes utilisateurs à faire.

Voici l'pom.xml dans le cas où il est pertinent: https://github.com/mikera/glaze/blob/master/pom.xml

Il est possible de configurer Maven pour qu'il permettra de créer un exécutable .jar qui comprend le natif de dépendances et exécuté avec succès lors d'un double-cliqué?

  • Quel est le problème exactement? Pouvez-vous montrer des exemples qui ne fonctionnent pas comme prévu?
  • Aucun OS je sais de poignées de pot (ou zip) des fichiers comme équivalent aux systèmes de fichiers. De sorte que vous aurez besoin d'extraire une bibliothèque native avant de le charger.
  • Dans le passé, j'ai installé pour l'assemblage d'un POT - séparé de ses ressources - et notamment d'un script de démarrage qui définit le nécessaire propriétés du système (c'est à dire au point de java.library.path à la resources répertoire).
InformationsquelleAutor mikera | 2012-08-20