0

我正在使用 jogl 原生 jars(如解释 -> http://jogamp.org/jogl/doc/userguide/#automatednativelibraryloading),我想通过 eclipse 导出 jar,如解释 -> http://jogamp.org/ wiki/index.php/JogAmp_JAR_File_Handling。第一种方法有效,但第二种方法无效,当然我想把所有东西都放在一个罐子里。

有没有人遇到过这个问题并且能够分享他的解决方案?

我正在运行 windows 7 64bit、java 64bit、eclipse 4.3 和最新的 jogl 库。

ps 我也试过蚂蚁脚本:

    <jar destfile="${dist.dir}/${app.name}-${app.version}.jar">
        <manifest>
            <attribute name="Main-Class" value="org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader"/>
            <attribute name="Rsrc-Main-Class" value="com.home.pso.Uruchom"/>
            <attribute name="Class-Path" value="."/>
            <attribute name="Rsrc-Class-Path" value="./ gluegen-rt.jar gluegen-rt-natives-windows-amd64.jar jogl-all.jar jogl-all-natives-windows-amd64.jar"/>
        </manifest>
        <zipfileset src="jar-in-jar-loader.zip"/>
        <fileset dir="${bin.dir}"/>
        <zipfileset dir="${lib.dir}" includes="*.jar"/>
    </jar>

ps2 我想做最简单的方法,最好不要使用本机库(.dll,.so),因为名称冲突(不同的平台)并且不使用任何 3-rd 方程序。

谢谢你的回答。

编辑:

我忘了提,我想用我的应用程序创建可运行的 jar。

运行 jar 后出现以下错误,这是我用第二种方法创建的:

ezekiel@vm-ubuntu:~/Pulpit/workspace/pso/lib$ 
/home/ezekiel/Pulpit/jdk1.7.0_40/jre/bin/java' -jar '/home/ezekiel/Pulpit/pso-1.0.jar' 
Catched URISyntaxException: Expected scheme-specific part at index 5: rsrc:, while    
TempJarCache.bootstrapNativeLib() of null (null + gluegen-rt-natives-linux-amd64.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:606)
     at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoader.java:58)
Caused by: java.lang.UnsatisfiedLinkError: Can't load library: /home/ezekiel/Pulpit/workspace/pso/lib/libgluegen-rt.so
     at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1846)
     at java.lang.Runtime.load0(Runtime.java:795)
     at java.lang.System.load(System.java:1061)
     at com.jogamp.common.jvm.JNILibLoaderBase.loadLibraryInternal(JNILibLoaderBase.java:468)
     at com.jogamp.common.jvm.JNILibLoaderBase.access$000(JNILibLoaderBase.java:63)
     at com.jogamp.common.jvm.JNILibLoaderBase$DefaultAction.loadLibrary(JNILibLoaderBase.java:94)
     at com.jogamp.common.jvm.JNILibLoaderBase.loadLibrary(JNILibLoaderBase.java:332)
     at com.jogamp.common.os.DynamicLibraryBundle$GlueJNILibLoader.loadLibrary(DynamicLibraryBundle.java:390)
     at com.jogamp.common.os.Platform$1.run(Platform.java:210)
     at java.security.AccessController.doPrivileged(Native Method)
     at com.jogamp.common.os.Platform.<clinit>(Platform.java:173)
     at javax.media.opengl.GLProfile.<clinit>(GLProfile.java:82)
     at javax.media.opengl.awt.GLCanvas.<init>(GLCanvas.java:247)
     at javax.media.opengl.awt.GLCanvas.<init>(GLCanvas.java:197)
     at javax.media.opengl.awt.GLCanvas.<init>(GLCanvas.java:187)
     at com.home.pso.Uruchom.main(Uruchom.java:74)
     ... 5 more

我也在linux下测试过这个^^

4

2 回答 2

1

这是解决方案 http://forum.jogamp.org/exporting-runnable-jar-through-eclipse-td4030094.html#a4030096 它有效,但随后在某些版本中停止。

于 2013-09-22T15:53:34.457 回答
0

这应该适合您:

  1. 在eclipse中转到文件->新建->项目-> Java项目
  2. 在项目根目录创建一个名为“lib”的新文件夹
  3. 将所有 jar 粘贴到您想要作为该项目导出 jar 的一部分包含在内的 lib 文件夹中。
  4. 右键单击项目并选择 -> 属性(在底部)
  5. 在属性对话框中,从左侧选择“java build path”(从顶部开始第四个)
  6. 在此视图中,选择“库”选项卡,然后单击“添加 jar”,在对话框中导航到您的 lib 文件夹并单击所有 jar,然后单击确定。
  7. 不要将一个选项卡转到右侧的“订购和导出”并选择您刚刚添加的所有 jar,以便它们将包含在项目的导出 jar 中。
  8. 单击“确定”关闭项目属性对话框,然后单击项目并选择“导出”
  9. 展开“java”节点文件夹并选择“Jar”,然后单击下一步。
  10. 选择您的项目并确保未选中所有其他项目。
  11. 在右上角的树形视图中展开您选择的项目,并确保选中“lib 文件夹”,否则在构建期间将不会导出。
  12. 通过单击“选择导出目标”下方的“浏览”为导出的 jar 创建文件路径
  13. 保留其他所有内容,选择“完成”并导航到您选择导出目标的文件系统,并查看您的 jar 是否正确。
于 2013-09-21T22:00:46.870 回答