【发布时间】:2012-04-14 11:49:51
【问题描述】:
编译后我的 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 文件的两个副本(我只能假设这是 JOGL 的 32 位版本和 64 位版本的 JOGL)
有没有办法让程序仅使用 32 位库运行?我想减少我必须进行的分发数量。
【问题讨论】:
-
如果从命令行运行,java -jar
会输出错误吗? -
这可能是
NoClassDefFound异常的经典案例...照kevingreen所说的去做,看看你得到了什么错误。 -
我编辑了这个问题来回答你。