2010-03-08 14 views
6

Sono abbastanza nuovo sia per Apache Ant che per GCJ, e ho difficoltà a provare a creare con GCJ tramite Ant.Come usare GCJ con Ant?

La mia app è in Scala, quindi ho bisogno di usare GCJ per prendere file .class come sorgente. Nessun problema nella compilazione di .scala in .class con Ant.

Per prima cosa ho capito come compilare manualmente un file .class per .o (oggetto), in questo modo:

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

vedo here che supporta la compilazione Ant GCJ attraverso il tag javac. Quindi ho pensato che questo dovrebbe funzionare:

Ma questo task javac non fa nulla e non ottengo errori. Qualche indizio? Grazie

+0

> La mia app è in Scala, quindi ho bisogno di usare > GCJ per prendere file .class come sorgente. Questo è un * non sequitur *. GCJ non è Java. Non posso raccomandarti di usarlo. Se devi avere una compilation nativa, ci sono prodotti correnti là fuori. – EJP

+0

Quale raccomanderesti? –

risposta

1

Sembra che tu voglia collegare la tua app in un eseguibile nativo. Ciò significa che hai già compilato il sorgente in codice bytecode JVM (come hai capito facendo compilando .scala in file .class). È necessario eseguire manualmente il comando gcj utilizzando l'attività <exec> per compilare il bytecode in file di codice oggetto gcc.

Mi raccomando qualcosa di simile:

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

Tenete a mente che è necessario definire le proprietà build.dir e object.dir, e potrebbe essere necessario aggiungere un'attività depends prima della javac nel target di compilazione (o semplicemente ricompilare da zero ogni volta). Potrei aver perso un sacco di cose, dovresti controllare le pagine di manuale (per gcj, gcc e ant) ​​se inizialmente non funziona.