2012-03-30 8 views
-4

Mein Glas wird nicht ausgeführt, nachdem ich es kompiliert habe. Ich benutze diese Ameise Build-Skript.jar wird nicht ausgeführt und kann kein externes Glas finden

<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> 

Das Manifest korrekt ist, und ich leite einige der Bibliotheken zu bekommen enthalten, aber wenn von der cmd Aufforderung ich den Fehler

java.io.FileNotFoundException 

Die Datei, um sie zu bekommen ist Bezug auf eine JOGL-Bibliothek

Anfangs lief ich das Projekt von Eclipse mit den 32-Bit-Bibliotheken, ich habe jetzt die 64-Bit-Bibliotheken in den Ordner-Bibliotheken enthalten, aber es sagt mir immer noch, dass es kann sie nicht finden.

In der Tat kann ich jetzt sehen, wenn ich öffnen Sie das Glas, zwei Kopien aller DLL-Dateien (ich kann nur annehmen, dass dies eine von der 32-Bit- und einer von den 64-Bit-Versionen von JOGL ist)

Gibt es keine Möglichkeit, das Programm nur mit den 32-Bit-Bibliotheken laufen zu lassen? Ich möchte die Anzahl der Distributionen reduzieren, die ich machen muss.

+5

Wenn Sie es über die Befehlszeile ausführen, gibt java -jar einen Fehler aus? – kevingreen

+1

Es ist wahrscheinlich ein klassischer Fall von 'NoClassDefFound' Ausnahme ... Tun Sie was kevingreen sagte und sehen Sie, welchen Fehler Sie bekommen. –

+0

Ich habe die Frage bearbeitet, um Sie zu beantworten. – Neilos

Antwort

0

Ich glaube nicht, dass ich die Downvotes verdient habe, aber hey.

Nun, das Problem war, dass ich auf .jars innerhalb von .jars referenzierte, ich dachte nicht, dass dies ein Problem wäre, aber es war. Die Lösung bestand darin, die .jars (Bibliotheken) neben meine kompilierte Anwendung .jar zu stellen und das Manifest entsprechend zu aktualisieren. Es ist auch möglich, .jars innerhalb von .jars zu verwenden, aber Sie müssen eine andere Gruppe von Klassen verwenden, damit Sie dies tun können. Eclipse hat dies und wenn Sie executable .jar innerhalb von Eclipse erstellen, können Sie .jars in .jars haben.

Verwandte Themen