2008-09-29 11 views
5

J'ai le problème qu'une étape spécifique dans Ant ne peut être exécutée que lorsque Java 1.5 est installé sur l'ordinateur de build. La définition de tâche utilise un fichier jar qui a été compilé à l'aide de la version 1.5. L'exécution d'une machine virtuelle 1.4 lance donc une exception IncompatibleClassVersion.Lorsque vous utilisez ANT, comment puis-je définir une tâche uniquement si j'ai une version java spécifique?

Je dois trouver une solution en attendant que cette tâche fonctionne pour ce projet spécifique qui nécessite 1.4, mais une question m'est venue. Comment puis-je éviter de définir cette tâche et d'exécuter cette étape facultative si je n'ai pas de version Java spécifique?

Je pourrais utiliser les balises "if" ou "unless" sur la balise cible, mais celles-ci vérifient uniquement si une propriété est définie ou non. Je voudrais aussi avoir une solution qui ne nécessite pas de bibliothèques supplémentaires, mais je ne sais pas si la fonctionnalité intégrée en standard est suffisante pour effectuer une telle tâche.

Répondre

10

La version Java est exposée via la propriété ant.java.version. Utilisez une condition pour définir une propriété et n'exécuter la tâche que si elle est vraie.

<?xml version="1.0" encoding="UTF-8"?> 

<project name="project" default="default"> 

    <target name="default" depends="javaCheck" if="isJava6"> 
     <echo message="Hello, World!" /> 
    </target> 

    <target name="javaCheck"> 
     <echo message="ant.java.version=${ant.java.version}" /> 
     <condition property="isJava6"> 
      <equals arg1="${ant.java.version}" arg2="1.6" /> 
     </condition> 
    </target> 

</project> 
2

La propriété à vérifier dans le fichier de construction est ${ant.java.version}.

Vous pouvez utiliser l'élément <condition> pour rendre une tâche lorsqu'une propriété est égale à une certaine valeur:

<condition property="legal-java"> 
    <matches pattern="1.[56].*" string="${ant.java.version}"/> 
</condition> 
+0

Ahhh une honte que je dois utiliser Ant 1.6! Cette fonctionnalité regexp n'est disponible que depuis Ant 1.7! –