2010-03-08 3 views
6

Je suis assez nouveau à la fois pour Apache Ant et GCJ, et j'ai du mal à construire avec GCJ via Ant.Comment utiliser GCJ avec Ant?

Mon application est dans Scala, j'ai donc besoin d'utiliser GCJ pour prendre les fichiers .class comme source. Pas de problème pour compiler .scala en .class avec Ant.

D'abord, je compris comment compiler manuellement un fichier .class à .o (objet), de cette façon:

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

Je vois que here Ant soutient la compilation GCJ par la balise javac. Donc j'ai pensé que cela devrait fonctionner:

<target name="gcjCompile" depends="compile"> 
    <mkdir dir="${object.dir}" /> 
    <javac srcdir="${build.dir}" 
      destdir="${object.dir}" 
      compiler="gcj" 
      executable="C:/gcc/gcc-4.3/bin/gcj.exe" 
      classpathref="gcjProject.classpath"> 
     <include name="**/*.class"/> 
    </javac> 
</target> 

Mais cette tâche javac ne fait rien et je ne reçois aucune erreur. Des indices? Merci

+0

> Mon application est dans Scala, j'ai donc besoin d'utiliser > GCJ pour prendre les fichiers .class comme source. C'est un * non sequitur *. GCJ n'est pas Java. Je ne peux pas vous recommander de l'utiliser. Si vous devez avoir une compilation native, il existe des produits actuels. – EJP

+0

Que recommanderiez-vous? –

Répondre

1

Il semble que vous souhaitiez lier votre application dans un exécutable natif. Cela signifie que vous avez déjà compilé la source dans le bytecode JVM (comme vous l'avez compris en compilant .scala en fichiers .class). Vous devrez exécuter la commande gcj manuellement à l'aide de la tâche <exec> pour compiler le bytecode dans les fichiers de code d'objet gcc.

Je recommande quelque chose comme ceci:

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

Gardez à l'esprit que vous devez définir les propriétés build.dir et object.dir, et vous pouvez avoir besoin d'ajouter une tâche depends avant la javac dans la cible de compilation (ou juste recompiler à partir de zéro à chaque fois). J'ai peut-être manqué beaucoup de choses, vous devriez vérifier les pages de manuel (pour gcj, gcc et ant) ​​si ça ne marche pas au début.