2010-03-08 6 views
6

Ich bin ziemlich neu in Apache Ant und GCJ, und es fällt mir schwer, mit GCJ über Ant zu bauen.Wie GCJ mit Ant verwenden?

Meine App ist in Scala, also muss ich GCJ verwenden, um .class-Dateien als Quelle zu nehmen. Kein Problem beim Kompilieren von .scala zu .class mit Ant.

Zuerst habe ich herausgefunden, wie man manuell eine .class-Datei kompilieren, um zu .o (Objekt), auf diese Weise:

gcj --classpath=(...) -c (somepath)MouseClickListener.class -o (somepath)MouseClickListener.o 

ich here sehen, die Ant unterstützt GCJ Kompilierung durch den javac-Tag. Also ich dachte, das sollte funktionieren:

Aber diese Java-Task tut nichts und ich bekomme keine Fehler. Irgendwelche Hinweise? Danke

+0

> Meine App ist in Scala, also muss ich > GCJ verwenden, um .class-Dateien als Quelle zu verwenden. Das ist ein * Nicht-Fazit *. GCJ ist nicht Java. Ich kann dir nicht empfehlen, es zu benutzen. Wenn Sie native Kompilierung haben müssen, gibt es aktuelle Produkte da draußen. – EJP

+0

Welche würden Sie empfehlen? –

Antwort

1

Es klingt wie Sie Ihre App in eine native ausführbare Datei verknüpfen möchten. Das bedeutet, dass Sie die Quelle bereits in JVM-Bytecode kompiliert haben (wie Sie es durch das Kompilieren von .scala in .class-Dateien herausgefunden haben). Sie müssen den Befehl gcj manuell mit der Task <exec> ausführen, um den Bytecode in gcc-Objektcodedateien zu kompilieren.

ich so etwas wie dieses empfehlen würde:

<property name="main.class" value="Main" /> 
<property name="class.dir" value="${basedir}/classes" /> 
<target name="compile"> 
    <mkdir dir="${class.dir}" /> 
    <javac srcdir="${build.dir}" 
     destdir="${class.dir}" 
     compiler="gcj" 
     executable="C:/gcc/gcc-4.3/bin/gcj.exe" 
     classpathref="gcjProject.classpath"> 
    <include name="**/*.java"/> 
    </javac> 
</target> 
<target name="link" depends="compile"> 
    <mkdir dir="${object.dir"} /> 
    <exec cmd="C:/gcc/gcc-4.3/bin/gcj.exe"> 
    <arg value="-classpath=${object.dir}" /> 
    <arg value="-c" /> 
    <arg value="*.class" /> 
    </exec> 
</target> 

Beachten Sie, dass Sie die build.dir und object.dir Eigenschaften definieren müssen, und Sie können eine depends Aufgabe vor dem javac in der Kompilierung Ziel hinzufügen müssen (oder einfach jedes Mal neu kompilieren). Ich habe vielleicht eine Menge Dinge verpasst, Sie sollten die Manual-Seiten (für gcj, gcc und ant) ​​überprüfen, wenn es zuerst nicht funktioniert.