WorldWind - Runnable jar: в gava.library.path отсутствует клей

Я работаю с WorldWind Java и Eclipse.

Я пытаюсь экспортировать работающую флягу из моего проекта в Eclipse. Экспорт идет хорошо, но когда я пытаюсь запустить флягу, я получаю эту ошибку:

Exception in thread "main" java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:616)
    at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoader.java:58)
Caused by: java.lang.UnsatisfiedLinkError: no gluegen-rt in java.library.path
    at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1681)
    at java.lang.Runtime.loadLibrary0(Runtime.java:840)
    at java.lang.System.loadLibrary(System.java:1047)
    at com.sun.gluegen.runtime.NativeLibLoader.loadLibraryInternal(NativeLibLoader.java:102)
    at com.sun.gluegen.runtime.NativeLibLoader.access$000(NativeLibLoader.java:51)
    at com.sun.gluegen.runtime.NativeLibLoader$1.run(NativeLibLoader.java:70)
    at java.security.AccessController.doPrivileged(Native Method)
    at com.sun.gluegen.runtime.NativeLibLoader.loadGlueGenRT(NativeLibLoader.java:68)
    at com.sun.gluegen.runtime.NativeLibrary.ensureNativeLibLoaded(NativeLibrary.java:399)
    at com.sun.gluegen.runtime.NativeLibrary.open(NativeLibrary.java:163)
    at com.sun.gluegen.runtime.NativeLibrary.open(NativeLibrary.java:129)
    at com.sun.opengl.impl.x11.DRIHack.begin(DRIHack.java:109)
    at com.sun.opengl.impl.x11.X11GLDrawableFactory.<clinit>(X11GLDrawableFactory.java:99)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:186)
    at javax.media.opengl.GLDrawableFactory.getFactory(GLDrawableFactory.java:111)
    at javax.media.opengl.GLCanvas.chooseGraphicsConfiguration(GLCanvas.java:520)
    at javax.media.opengl.GLCanvas.<init>(GLCanvas.java:131)
    at javax.media.opengl.GLCanvas.<init>(GLCanvas.java:90)
    at gov.nasa.worldwind.awt.WorldWindowGLCanvas.<init>(Unknown Source)

Я могу запустить проект в Eclipse без каких-либо проблем, у меня есть worldwind.jar, jogl.jar, gluegen-rt.jar и gluegen-rt-natives-linux-amd64.jar, на которые есть ссылки в пути сборки с собственными библиотеками.so-файлами. место нахождения. На данный момент проект представляет собой просто JFrame, отображающий глобус WorldWind, как в gov.nasa.worldwindx.examples.SimplestPossibleExample.java.

Я пытаюсь создать приложение, которое будет работать на нескольких ОС.

Что я делаю неправильно, потому что мой jar не может работать, пока я могу без проблем запустить проект в Eclipse?

Я думаю, что у меня есть проблема в процессе экспорта банку с нативными библиотеками, но после поиска в Google я не могу найти решение этой проблемы.

Я использую 64-битную версию Linux с OpenJDK.

Благодарю.


Редактировать:

Я нашел обходной путь, который заставляет его работать, но не так, как мне бы хотелось:

Похоже, что Eclipse "Export Runnable Jar ... " не экспортирует файлы.so таким образом, чтобы они были доступны при запуске jar, в то время как требуемые файлы.jar включены в экспортированный файл.jar и доступны.

Решением было включить файлы.so (это будут.jnilib для Mac и.dll для Windows) в папку рядом с jar и запустить jar с помощью следующей командной строки: java -Xmx512m -Dsun.java2d.noddraw=true -Djava.library.path=./lib -jar MyJAR.jar

-Xmx512m увеличивает объем памяти Java, потому что WorldWind может потребоваться больше памяти, чем объем по умолчанию, -Dsun.java2d.noddraw=true Можно избежать некоторых ошибок отображения IIRC.

Я сделал файлы.bash и.bat, содержащие эту командную строку.

Из того, что я обнаружил, не похоже, что установка местоположения lib требуется в Windows, если файлы.dll находятся в той же папке, что и.jar, хотя в Linux это всегда необходимо. Поскольку я помещаю библиотеки в папку lib, которая находится в той же папке, что и.jar, мне нужно установить -Djava.library.path в обоих случаях.

Необходимые библиотеки для Linux: libgluegen-rt.so libjogl.so libjogl_awt.so

Я нашел их здесь: http://download.java.net/media/jogl/builds/archive/

Теперь экспортированный jar работает нормально на моей 64-битной системе Lunix, и я сейчас пытаюсь найти систему Windows и Mac, чтобы проверить ее.

Если у кого-то есть решение для доступа к файлам.so, которые находятся внутри файла.jar, это все равно приветствуется.

1 ответ

Вы смотрели на одну банку. У него есть система для упаковки нативных библиотек в банку приложения.

http://one-jar.sourceforge.net/index.php?page=details&file=native

Другие вопросы по тегам