2014-07-11 3 views
0

Je ne parviens pas à exécuter la tâche if. Mon code est:Impossible d'ajouter if-block dans build.xml

<?xml version="1.0" ?> 
<project default="main"> 

    <property name="buildsequence.property.file.fullpath" value="D:\testant\AntExample" /> 

    <target name="main" depends="compile, compress" description="Main target"> 
     <echo> 
      Building the .jar file. 
     </echo> 
    </target> 

    <target name="compile" description="Compilation target"> 
     <javac srcdir="src/org" destdir="src/org" fork="yes" executable="C:\Program Files\Java\jdk1.7.0_60\bin\javac"/> 
    </target> 

    <target name="compress" description="Compression target"> 
     <jar jarfile="Project.jar" basedir="src/org" includes="*.class" /> 

     <if> 
      <available file="${buildsequence.property.file.fullpath}" /> 
      <then>    
       <echo message="File exist"/> 
      </then> 
      <else> 
       <echo message="File do not exist" />     
      </else> 
     </if> 

    </target> 

</project> 

Erreur:

Buildfile: D:\projects\Self\AntExample\build.xml 
compile: 
    [javac] Compiling 1 source file to D:\projects\Self\AntExample\src\org 
compress: 

BUILD FAILED 
D:\projects\Self\AntExample\build.xml:19: Problem: failed to create task or type if 
Cause: The name is undefined. 
Action: Check the spelling. 
Action: Check that any custom tasks/types have been declared. 
Action: Check that any <presetdef>/<macrodef> declarations have taken place. 

Note: Le fichier existe à D:\testant\AntExample.

+1

en utilisant une si la tâche n'est pas la fourmi. la fourmis est en train de faire une cible en validant et d'autres cibles en fonction de cette cible et de ne leur donner que 'if' ou 'sauf si' une propriété est définie sur true. voir https://ant.apache.org/manual/targets.html –

Répondre

1

if fait partie de ant-contrib qui doit être présent dans votre chemin de classe. Une fois téléchargé, vous pouvez le mettre dans votre dossier Ant lib (Anthomé/lib), puis vous devez importer les tâches en ajoutant la ligne suivante au début du fichier de construction:

<taskdef resource="net/sf/antcontrib/antlib.xml" /> 
0

Comme l'explique @ manouti la tâche si est une extension externe, pas une partie de base ANT.

L'exemple suivant télécharge le pot manquant et appelle la déclaration taskdef nécessaire:

<project default="runif"> 

    <target name="init" description="Download dependencies and setup tasks"> 
    <mkdir dir="${user.home}/.ant/lib"/> 
    <get dest="${user.home}/.ant/lib/ant-contrib.jar" src="http://search.maven.org/remotecontent?filepath=ant-contrib/ant-contrib/1.0b3/ant-contrib-1.0b3.jar"/> 

    <taskdef resource="net/sf/antcontrib/antcontrib.properties"/> 
    </target> 

    <target name="runif" depends="init" description="Example running the ant-contrib if statement"> 
    <if> 
     <available file="file.txt" /> 
     <then>    
     <echo message="File exist"/> 
     </then> 
     <else> 
     <echo message="File do not exist" />     
     </else> 
    </if> 
    </target> 

</project> 

L'extension ant-contrib prend également en charge le mécanisme antlib plus moderne. L'exemple suivant montre comment il utilise les espaces de noms et ne nécessite pas de taskdef.

<project default="runif" xmlns:contrib="antlib:net.sf.antcontrib"> 

    <available classname="net.sf.antcontrib.logic.IfTask" property="if.task.exists"/> 

    <target name="init" description="Download missing dependencies" unless="if.task.exists"> 
    <mkdir dir="${user.home}/.ant/lib"/> 
    <get dest="${user.home}/.ant/lib/ant-contrib.jar" src="http://search.maven.org/remotecontent?filepath=ant-contrib/ant-contrib/1.0b3/ant-contrib-1.0b3.jar"/> 

    <fail message="ant-contrib installed run the build again"/> 
    </target> 

    <target name="runif" depends="init" description="Example running the ant-contrib if statement"> 
    <contrib:if> 
     <available file="file.txt" /> 
     <then>    
     <echo message="File exist"/> 
     </then> 
     <else> 
     <echo message="File do not exist" />     
     </else> 
    </contrib:if> 
    </target> 

</project> 
+0

Ce code dit impossible de charger le [taskdef] Impossible de charger les définitions à partir de la ressource net/sf/antcontrib/antlib.xml. Il n'a pas pu être trouvé. \t \t \t \t \t Construire le fichier .jar. user3616128

+0

@ user3616128 Je ne suis pas fan de l'extension ant-contrib. Si vous voulez vraiment l'utiliser, je vous recommande fortement d'utiliser une version plus moderne. V0.6 a été publié il y a 10 ans ... (2004). Je suppose que cela pourrait être votre problème. –

+0

@ user3616128 Dans mes exemples, j'ai fourni un exemple de la façon dont la compilation ANT peut télécharger et installer la dernière version de ant-contrib. Je trouve que cela rend la construction plus portable. –