2012-03-30 82 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文件。