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