2012-03-30 57 views
-4

我的罐子在编译后无法运行。我用这个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位库运行?我想减少我必须分配的数量。

+5

如果从命令行运行它,java -jar 是否会输出任何错误? – kevingreen 2012-03-30 19:03:00

+1

这可能是'NoClassDefFound'异常的经典案例...做一下kevingreen说的,看看你得到了什么错误。 – 2012-03-30 19:22:56

+0

我编辑了这个问题来回答你。 – Neilos 2012-03-31 12:33:31

回答

0

我不认为我应得的降低,但嘿。

无论如何,问题是我在.jars中引用.jars,我不认为这会是一个问题,但它是。解决方案是将.jars(库)放在我编译的应用程序.jar旁边并相应地更新清单。也可以在.jars中使用.jars,但您需要使用另一组类来让您执行此操作。 Eclipse有这个,如果你在eclipse中构建可执行的.jar文件,你可以在.jars文件中包含.jar文件。