2013-09-21 88 views
0

我使用jogl本地jar(解释 - >http://jogamp.org/jogl/doc/userguide/#automatednativelibraryloading),我想通过eclipse导出jar,解释如下 - >http://jogamp.org/wiki/index.php/JogAmp_JAR_File_Handling。 第一种方法正在工作,但第二种方法不是,当然我希望将所有东西放在一个罐子里。通过eclipse导出runnable jar - 使用jogl native jar的项目

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

即时运行的Windows 7 64位,Java 64位,eclipse 4.3和最新的jogl libriary。

p.s. 我也曾尝试ant脚本:

<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),因为名称冲突的(不同势平台)和无需使用任何第三方程序。

谢谢你的回答。

编辑:

我忘了提,我想创建运行的JAR我的申请。

和我收到运行罐子,我用第二种方法创建后,出现以下错误:

[email protected]:~/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下的^^

回答

0

这应该对你罚款:

  1. 在eclipse中转到File - > New - > Project - > Java Project
  2. 在项目根目录下创建一个名为“lib”的新文件夹,
  3. 将所有jar添加到你想包含的lib文件夹中,作为这个项目导出jar的一部分。
  4. 右键单击该项目并选择 - >属性(在botoom)
  5. 在属性对话框的左侧选择“Java构建路径”(第4个从顶部)
  6. 在这个视图中,选择“库“选项卡,然后单击”添加jar“,在对话框中导航到您的lib文件夹,并移动点击所有的jar然后点击好的。
  7. 不要将一个选项卡移到右侧的“订单和导出”,然后选择您刚刚添加的所有罐子,以便它们将包含在项目的导出罐中。
  8. 通过单击“okay”关闭项目属性对话框,然后单击项目并选择“导出”
  9. 展开“java”节点文件夹并选择“Jar”,然后单击下一步。
  10. 选择您的项目,并确保所有其他项目未被选中。
  11. 在右上角的树视图中展开您选定的项目,并确保选中“lib文件夹”,否则在构建过程中不会导出它。
  12. 通过点击“浏览”下面的“选择出口目的地”
  13. 保留一切为的是创造你的出口的jar文件路径,选择“完成”,在这里你选择的出口目的地浏览到您的文件系统,并看到你的罐子是正确的。
+0

这不是我想到的,但仍然感谢。我编辑了我的帖子。 – zerocool