Search code examples
antbuild.xml

Getting condition doesn't support the nested "then" element in <condition>


I'm new to Ant/Apache. When I tried to use <condition> tag in XML it's throwing an error. condition doesn't support the nested "then" element. Here is my code

<target name="determine-ae-build">
    <condition property="ApplicationName">
        <equals arg1="${ApplicationName}" arg2="new"/>
        <then>
            <echo>3.9 Robots Config Copied</echo>
        </then>
        <else>
            <condition property="ApplicationName">
                <equals arg1="${ApplicationName}" arg2="old"/>
                <then>
                    <echo>3.8 Robots Config Copied</echo>
                </then>
                <else>
                    <echo>3.9 Robots Config Copied</echo>
                </else>
            </condition>
        </else>
    </condition>
</target>

I've tried with IF also but since my Ant version is not supporting to do this. Can someone help to resolve this issue. Thanks! in advance


Solution

  • <target name="prepare-copy" description="copy file based on condition" depends="determine-ae-build, prepare-copy-old, prepare-copy-new, prepare-copy-default">
        <sleep seconds="10"/> --To read the results
    </target>
    
    <target name="prepare-copy-old" description="copy file based on condition" if="copy.old">
        <echo>Old File Copied </echo>
    </target>
    
    <target name="prepare-copy-new" description="copy file based on condition" if="copy.new">
        <echo>New File Copied</echo>
    </target>
    
    <target name="prepare-copy-default" description="copy file based on false condition" if="copy.default">
        <echo>Default File Coping</echo>
    </target>
    
    <target name="determine-ae-build">      
        <condition property="copy.old">
            <equals arg1="${ApplicationName}" arg2="old"/>
        </condition>
        
        <condition property="copy.new">
            <equals arg1="${ApplicationName}" arg2="new"/>
        </condition>
        
        <condition property="copy.default">
            <not>
                <or>
                    <equals arg1="${ApplicationName}" arg2="new"/>
                    <equals arg1="${ApplicationName}" arg2="old"/>
                </or>
            </not>
        </condition>
    </target>
    

    Explanation: Calling way "ant -Dcopy.old = true prepare-copy". Here we are passing to copy old file hence, "Old File Copied" will copied. If you call it like "ant prepare-copy" it'll call "Default File Coping".

    Kindly Accept my answer if it is answered your question.Thankyou!