.jar无法运行,也无法找到外部罐子
问题描述:
我的罐子在编译后无法运行。我用这个Ant构建脚本.jar无法运行,也无法找到外部罐子
<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>
清单是正确的,我从命令提示符我得到的错误
java.io.FileNotFoundException
的文件时,它运行时管理得到一些库包括在内,但指的是一个JOGL库gluegen-rt-natives-windowsamd64.jar
最初我使用32位库从eclipse运行项目,现在我已将64位库包含在文件夹库中,但它仍然告诉我它找不到它们。
其实我现在可以看到,当我打开罐子,所有.dll文件的两个副本(我只能假设这是一个从32位和一个从JOGL的64位版本)
是否没有办法让程序只使用32位库运行?我想减少我必须分配的数量。
答
我不认为我应得的降低,但嘿。
无论如何,问题是我在.jars中引用.jars,我不认为这会是一个问题,但它是。解决方案是将.jars(库)放在我编译的应用程序.jar旁边并相应地更新清单。也可以在.jars中使用.jars,但您需要使用另一组类来让您执行此操作。 Eclipse有这个,如果你在eclipse中构建可执行的.jar文件,你可以在.jars文件中包含.jar文件。
如果从命令行运行它,java -jar是否会输出任何错误? –
kevingreen
2012-03-30 19:03:00
这可能是'NoClassDefFound'异常的经典案例...做一下kevingreen说的,看看你得到了什么错误。 – 2012-03-30 19:22:56
我编辑了这个问题来回答你。 – Neilos 2012-03-31 12:33:31