.jar没有运行,也找不到外部jar

时间:2012-03-30 19:01:22

标签: java ant jar jogl

编译后我的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位库运行程序?我想减少我必须做的分配量。

1 个答案:

答案 0 :(得分:0)

我不认为我应该得到支持,但是嘿。

好吧无论如何问题是我在.jars中引用.jars,我不认为这会是一个问题,但事实确实如此。解决方案是将.jars(库)放在我编译的应用程序.jar旁边并相应地更新清单。也可以在.jars中使用.jars,但是你需要使用另一组类来实现这一点。 Eclipse有这个,如果你在eclipse中构建excecutable .jar,你可以在.jars中拥有.jars。