2012-06-12 4 views
4

나는 WorldWind Java과 Eclipse로 작업하고 있습니다.WorldWind - Runnable jar : java.library.path에 gluegen-rt가 없습니다.

Eclipse에서 내 프로젝트에서 실행 가능한 jar를 내보내려고합니다. 내가 worldwind.jar, jogl.jar, gluegen-rt.jar이 있고, 나는 아무 문제없이 이클립스 프로젝트를 실행할 수 있습니다

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) 

: 수출이 잘 간다하지만 난 항아리를 실행하려고하면이 오류가있어 및 gluegen-rt-natives-linux-amd64.jar은 기본 경로 인 .so 파일 위치를 사용하여 빌드 경로에서 참조됩니다. 현재 프로젝트는 gov.nasa.worldwindx.examples.SimplestPossibleExample.java에서와 같이 WorldWind 글로브를 표시하는 JFrame입니다.

여러 OS에서 실행되는 응용 프로그램을 빌드하려고합니다.

이클립스에서 문제없이 프로젝트를 실행할 수있는 동안 내 항아리가 제대로 작동하지 않는 이유는 무엇입니까?

기본 라이브러리가있는 jar 파일을 내보내는 과정에서 문제가 있다고 생각하지만 Google에서 찾은 후에이 문제에 대한 해결책을 찾을 수 없습니다.

OpenJDK를 사용하여 Linux 64 비트에서 실행됩니다.

감사합니다.


편집 :

내가 그것을 작동하게하는 해결 방법을 찾을 수 있지만 내가 그것을하고자하는 방법은 ' "... 수출의 Runnable 항아리"

그것은 이클립스를 보인다 아무튼 jar 파일을 액세스 할 수있는 방식으로 .so 파일을 내보내는 반면, 재구성 된 .jar 파일은 내 보낸 .jar 파일에 포함되어 도달 할 수 있습니다. java -Xmx512m -Dsun.java2d.noddraw=true -Djava.library.path=./lib -jar MyJAR.jar

-Xmx512m은 다음과 같습니다

이 솔루션은 다음 항아리 다음과 같은 명령 줄을 사용하여 병을 런칭에 폴더에 .so를 파일을 (이 Windows 용 Mac 용 .jnilib 및 .DLL 것)를 포함하는 것이 었습니다 WorldWind가 기본 금액보다 더 많은 메모리를 필요로 할 수 있기 때문에 Java 메모리를 늘리면 -Dsun.java2d.noddraw=true은 IIRC의 표시 오류를 피할 수 있습니다.

이 명령 줄이 포함 된 .bash 및 .bat 파일을 만들었습니다.

내가 찾은 바에 따르면 .dll 파일이 .jar과 동일한 폴더에있는 한 lib 위치가 Windows에서 requiered 인 것처럼 보이지는 않지만 Linux에서는 항상 필요합니다. 라이브러리를 .jar과 같은 폴더에있는 lib 폴더에 넣었으므로 두 경우 모두 -Djava.library.path을 설정해야합니다.

리눅스에 대한 필요한 라이브러리

은 다음과 같습니다 : 내가 여기를 발견

libjogl_awt.so libjogl.so libgluegen-rt.so : http://download.java.net/media/jogl/builds/archive/

이제 수출 단지 내 Lunix 64 비트에서 잘 실행 시스템과 나는 현재 그것을 테스트하기 위해 Windows와 Mac 시스템을 찾으려고 노력하고있다.

누구나 액세스 할 수있는 솔루션이있는 경우.jar 파일 안에있는 파일들도 여전히 환영합니다.

+2

이건 상당히 좋지 않습니다. 전체적인 아이디어는 모든 gluegen과 jogl을 하나의 큰 runnable jar (uber jar)에 포함시키고 libs와 같은 다른 것없이 사용하는 것입니다. –

+0

하지만 때때로 U는이 요구 사항을 얻습니다. 그래서 Autar가 찾은 해결책은 나를위한 것이 아닙니다. – Romczyk

답변