web-dev-qa-db-fra.com

Comment changer le compilateur Ant en JDK 1.6

Je dois compiler mon code source pour être compatible avec jre 1.6. Cependant, lorsque je tente de définir l'attribut compilateur de la tâche javac sur javac1.6, ant compilera toujours mon code avec javac1.7. J'ai également essayé de définir la version du compilateur sur "moderne" et cela n'a pas aidé.

<target name="compile-tests">
    <javac compiler="javac1.6" includeantruntime="false" srcdir="${test.dir}"
     destdir="${build.dir}" >
        <classpath refid="class.path" />
    </javac>
</target>

Mon Java_HOME est défini sur JDK 1.6:

echo $Java_HOME </code> gives: <code>
/usr/lib/jvm/Java-6-openjdk-AMD64/

Ma version de fourmi est: Apache Ant (TM) version 1.8.2 

Selon cet article , ant utilise son propre compilateur. Comment remplacer le paramètre par défaut ant? En outre, selon cet article et la documentation ant, je peux définir la propriété globale build.compiler. Comment définir cette propriété et comment puis-je le faire?

8
user847352

Je pense que Ant compiler est juste pour savoir quelles propriétés sont supportées par le compilateur. Dans javac en général, l'attribut ou l'option à transmettre au compilateur est target

Vous ne devriez même pas avoir besoin d'un compilateur Java 6 installé.

5
madth3

Dans la tâche javac, essayez de spécifier le compilateur Java en définissant l'attribut executable comme suit:

<property name="JDK1.6.dir" location="/usr/lib/jvm/Java-6-openjdk-AMD64" />
<property name="javac1.6" location="${JDK1.6.dir}/bin/javac" />

<target name="compile-tests">
  <javac executable="${javac1.6}" 
      fork="yes"
      includeantruntime="false" 
      srcdir="${test.dir}"
      destdir="${build.dir}" >
    <classpath refid="class.path" />
  </javac>
</target>
31
Christopher Peisert

Utilisez l'attribut "target" de la tâche Ant javac pour définir la version de Java avec laquelle vous souhaitez que vos fichiers de classe soient compatibles (définissez-la donc sur "1.6" dans votre cas). Voir la documentation de la tâche pour plus de détails.

1
gareth_bowles

J'ai pensé qu'il serait bien d'ajouter une réponse mise à jour à cette question, car j'ai récemment fait face à beaucoup de maux de tête autour de ce même problème. Mon cas d'utilisation spécifique: Mon ordinateur utilise JRE 1.8, mais j'avais besoin de cibler JRE 1.7 s'exécutant sur le serveur. L'astuce pour moi était d'utiliser les attributs suivants en combinaison (en faisant référence à la documentation ):

  • srcdir : Emplacement des fichiers Java.
  • destdir : Emplacement dans lequel stocker les fichiers de classe.
  • incleantruntime : Indique s'il faut inclure les bibliothèques d'exécution Ant dans le chemin d'accès aux classes. Il est généralement préférable de définir ce paramètre sur false pour que le comportement du script ne soit pas sensible à l'environnement dans lequel il est exécuté.
  • source : Fonctionnalités du langage Java acceptées par le compilateur
  • target : Génère des fichiers de classe pour une version spécifique de la machine virtuelle Java (compilation croisée).
  • fork : Indique s'il faut exécuter javac avec le compilateur JDK en externe.
  • compiler : L'implémentation du compilateur à utiliser.

Vous non devez spécifier le fichier exécutable, sauf si vous avez des dépendances spécifiques (par exemple, une version d'entreprise plus récente par opposition à la dernière version gratuite).

Exemple:

<javac srcdir="${source}"
       destdir="${Java.output.dir}"
       includeantruntime="false"
       source="1.7"
       target="1.7"
       fork="yes"
       compiler="javac1.7">
</javac>
0
Nate Karasch

À propos des bases de Ant, puisqu’elle nécessite une machine virtuelle Java, il suffit qu’elle reconnaisse un JRE à cette fin. Cependant, si le processus de construction doit compiler des classes, il dépendra d'un compilateur Java et s'il n'en trouve pas, la construction échouera.

Il est possible de configurer Ant pour qu’il utilise l’un des nombreux compilateurs Java. Toutefois, je me concentrerai sur le javac d’Oracle pour l’explication ci-dessous. Voici les alternatives ...

1) Si le JRE reconnu par Ant pour son exécution est un sous-répertoire du JDK, il passera au niveau du JDK et identifiera les ressources requises.

2) Si la variable d’environnement Java_HOME est définie de manière à pointer sur une machine virtuelle Java (et non sur JRE), ant sera en mesure de compiler des artefacts Java.

3) Alternativement, conformément à la documentation Ant, JAVACMD peut être défini dans un fichier de traitement par lots spécifique au système d'exploitation (antrc_pre.bat pour Windows) placé dans votre répertoire personnel (et non celui de Ant), puis il reconnaîtra la machine virtuelle. Veuillez noter que JAVACMD doit faire référence au chemin complet de Java.exe situé dans un dossier bin et non à celui de la maison JVM.

4) Sinon, la ligne de commande Ant peut prendre la liste des bibliothèques en utilisant les options -l. Passez une option tools.jar à -l et cela suffirait.

5) Enfin, l'attribut fork de la tâche JavaC peut être défini comme expliqué ci-dessus. Gardez à l'esprit que cela nécessite beaucoup de ressources et n'est pas recommandé.

0
Anil Kumar Rao