我必须从jar
项目中提取可运行的Eclipse
文件。我知道选择将所需的包打包到生成的JAR 会使jar
文件比选择将所需库提取到生成的JAR 更慢,但问题是如果我提取由于以下错误,应用程序无法启动而不是打包它们:
Catched FileNotFoundException: C:\Users\rober\Desktop\palbo-natives-windows-amd64.jar (The system cannot find the file specified), while TempJarCache.bootstrapNativeLib() of jar:file:/C:/Users/rober/Desktop/palbo-natives-windows-amd64.jar!/ (file:/C:/Users/rober/Desktop/ + palbo-natives-windows-amd64.jar)
Exception in thread "main" java.lang.UnsatisfiedLinkError: no gluegen-rt in java.library.path
at java.lang.ClassLoader.loadLibrary(Unknown Source)
at java.lang.Runtime.loadLibrary0(Unknown Source)
at java.lang.System.loadLibrary(Unknown Source)
at com.jogamp.common.jvm.JNILibLoaderBase.loadLibraryInternal(JNILibLoaderBase.java:454)
at com.jogamp.common.jvm.JNILibLoaderBase.access$000(JNILibLoaderBase.java:59)
at com.jogamp.common.jvm.JNILibLoaderBase$DefaultAction.loadLibrary(JNILibLoaderBase.java:90)
at com.jogamp.common.jvm.JNILibLoaderBase.loadLibrary(JNILibLoaderBase.java:328)
at com.jogamp.common.os.DynamicLibraryBundle$GlueJNILibLoader.loadLibrary(DynamicLibraryBundle.java:390)
at com.jogamp.common.os.Platform$2.run(Platform.java:249)
at java.security.AccessController.doPrivileged(Native Method)
at com.jogamp.common.os.Platform.loadGlueGenRTImpl(Platform.java:231)
at com.jogamp.common.os.Platform.<clinit>(Platform.java:183)
at javax.media.opengl.GLProfile.<clinit>(GLProfile.java:99)
at org.jzy3d.global.Settings.<init>(Settings.java:12)
at org.jzy3d.global.Settings.getInstance(Settings.java:21)
at org.jzy3d.chart.Chart.<init>(Chart.java:59)
当然,所有必需的库都已添加到Eclipse项目中,因此如果在Eclipse中启动,应用程序将完美地运行。
有没有办法避免这个问题?换句话说,有没有办法让jar
找到所有必需的库,即使我选择将所需库提取到生成的JAR 或将所需的库复制到子文件中 - 生成的JAR旁边的文件夹?
其他信息:
即使我选择将所需的资源包打包到生成的JAR 中,我也需要一些
.dll
个文件(例如gluegen-rt.dll
,jogl.dll
,{{ 1}},jogl_awt.dll
)在可运行的jogl_cg.dll
文件的同一文件夹中,以使其正确打开。此外,应用程序需要永远初始化。
摘要:
将所需的库提取到生成的JAR 或将所需的库复制到生成的JAR旁边的子文件夹中:由于上面发布的异常,无法打开应用程序。
将生成的JAR打包所需的库:值得注意的性能问题。