Ant if else condition?

后端 未结 5 1273
傲寒
傲寒 2020-12-13 13:03

Is there an if/else condition that I can use for an Ant task?

This is what i have written so far:



        
相关标签:
5条回答
  • 2020-12-13 13:20

    Since ant 1.9.1 you can use a if:set condition : https://ant.apache.org/manual/ifunless.html

    0 讨论(0)
  • 2020-12-13 13:25

    You can also do this with ant contrib's if task.

    <if>
        <equals arg1="${condition}" arg2="true"/>
        <then>
            <copy file="${some.dir}/file" todir="${another.dir}"/>
        </then>
        <elseif>
            <equals arg1="${condition}" arg2="false"/>
            <then>
                <copy file="${some.dir}/differentFile" todir="${another.dir}"/>
            </then>
        </elseif>
        <else>
            <echo message="Condition was neither true nor false"/>
        </else>
    </if>
    
    0 讨论(0)
  • 2020-12-13 13:26

    The quirky syntax using conditions on the target (described by Mads) is the only supported way to perform conditional execution in core ANT.

    ANT is not a programming language and when things get complicated I choose to embed a script within my build as follows:

    <target name="prepare-copy" description="copy file based on condition">
        <groovy>
            if (properties["some.condition"] == "true") {
                ant.copy(file:"${properties["some.dir"]}/true", todir:".")
            }
        </groovy>
    </target>
    

    ANT supports several languages (See script task), my preference is Groovy because of it's terse syntax and because it plays so well with the build.

    Apologies, David I am not a fan of ant-contrib.

    0 讨论(0)
  • 2020-12-13 13:26
    <project name="Build" basedir="." default="clean">
        <property name="default.build.type" value ="Release"/>
    
        <target name="clean">
        <echo>Value Buld is now  ${PARAM_BUILD_TYPE} is set</echo>
            <condition property="build.type" value="${PARAM_BUILD_TYPE}" else="${default.build.type}">
                <isset property="PARAM_BUILD_TYPE"/>
            </condition>
    
           <echo>Value Buld is now  ${PARAM_BUILD_TYPE} is set</echo>
           <echo>Value Buld is now  ${build.type} is set</echo>
        </target>
    </project>
    

    In my Case DPARAM_BUILD_TYPE=Debug if it is supplied than, I need to build for for Debug otherwise i need to go for building Release build. I write like above condition it worked and i have tested as below it is working fine for me.

    And property ${build.type} we can pass this to other target or macrodef for processing which i am doing in my other ant macrodef.

    D:\>ant -DPARAM_BUILD_TYPE=Debug
    Buildfile: D:\build.xml
    clean:
         [echo] Value Buld is now  Debug is set
         [echo] Value Buld is now  Debug is set
         [echo] Value Buld is now  Debug is set
    main:
    BUILD SUCCESSFUL
    Total time: 0 seconds
    D:\>ant
    Buildfile: D:\build.xml
    clean:
         [echo] Value Buld is now  ${PARAM_BUILD_TYPE} is set
         [echo] Value Buld is now  ${PARAM_BUILD_TYPE} is set
         [echo] Value Buld is now  Release is set
    main:
    BUILD SUCCESSFUL
    Total time: 0 seconds
    

    It work for me to implement condition so posted hope it will helpful.

    0 讨论(0)
  • 2020-12-13 13:34

    The if attribute does not exist for <copy>. It should be applied to the <target>.

    Below is an example of how you can use the depends attribute of a target and the if and unless attributes to control execution of dependent targets. Only one of the two should execute.

    <target name="prepare-copy" description="copy file based on condition"
        depends="prepare-copy-true, prepare-copy-false">
    </target>
    
    <target name="prepare-copy-true" description="copy file based on condition"
        if="copy-condition">
        <echo>Get file based on condition being true</echo>
        <copy file="${some.dir}/true" todir="." />
    </target>
    
    <target name="prepare-copy-false" description="copy file based on false condition" 
        unless="copy-condition">
        <echo>Get file based on condition being false</echo>
        <copy file="${some.dir}/false" todir="." />
    </target>
    

    If you are using ANT 1.8+, then you can use property expansion and it will evaluate the value of the property to determine the boolean value. So, you could use if="${copy-condition}" instead of if="copy-condition".

    In ANT 1.7.1 and earlier, you specify the name of the property. If the property is defined and has any value (even an empty string), then it will evaluate to true.

    0 讨论(0)
提交回复
热议问题