编译后我的jar不会运行。我使用这个ant构建脚本
<project name="HelloWorld" basedir="." default="jar">
<property name="src.dir" value="src"/>
<property name="build.dir" value="build"/>
<property name="classes.dir" value="${build.dir}/classes"/>
<property name="jar.dir" value="${build.dir}/jar"/>
<property name="libsSrc" value="libs"/>
<property name="main-class" value="nat.ise.ApplicationStarter"/>
<path id="classpath">
<fileset dir="${libsSrc}" includes="*.jar"/>
</path>
<pathconvert property="mf.classpath" pathsep=" ">
<path refid="classpath"/>
<mapper>
<chainedmapper>
<flattenmapper/>
<globmapper from="*.jar" to="lib/*.jar"/>
</chainedmapper>
</mapper>
</pathconvert>
<target name="clean">
<delete dir="${build.dir}"/>
</target>
<target name="compile">
<mkdir dir="${classes.dir}"/>
<javac srcdir="." classpathref="classpath" destdir="${classes.dir}"/>
</target>
<target name="jar" depends="compile">
<mkdir dir="${jar.dir}"/>
<jar destfile="${jar.dir}/${ant.project.name}.jar">
<zipgroupfileset dir="${libsSrc}" includes="*.jar"/>
<fileset dir="${classes.dir}" includes="**/*.class"/>
<manifest>
<attribute name="Main-Class" value="${main-class}"/>
<attribute name="Class-Path" value="${mf.classpath}"/>
</manifest>
</jar>
</target>
</project>
清单是正确的,我正在设法包含一些库但是当从cmd提示符运行时我得到错误
java.io.FileNotFoundException
它指的是JOGL库gluegen-rt-natives-windowsamd64.jar的文件
最初我使用32位库从eclipse运行项目,我现在已将64位库包含在libs文件夹中,但它仍然告诉我它找不到它们。
事实上,我现在可以看到,当我打开jar时,所有.dll文件的两个副本(我只能假设这是一个来自32位和一个来自64位版本的JOGL)
有没有办法只使用32位库运行程序?我想减少我必须做的分配量。
答案 0 :(得分:0)
我不认为我应该得到支持,但是嘿。
好吧无论如何问题是我在.jars中引用.jars,我不认为这会是一个问题,但事实确实如此。解决方案是将.jars(库)放在我编译的应用程序.jar旁边并相应地更新清单。也可以在.jars中使用.jars,但是你需要使用另一组类来实现这一点。 Eclipse有这个,如果你在eclipse中构建excecutable .jar,你可以在.jars中拥有.jars。