Ant: How do I set a properties from a comma-separated list passed in on command line?

前端 未结 2 1745
北荒
北荒 2021-01-11 14:44

I\'m using Ant 1.8.1. If I passed in an argument on the command line ...

-DenableProperties=abc,def,ghi,jkl

How do I set individual proper

相关标签:
2条回答
  • 2021-01-11 14:59

    Can't think of a way to do this in core Ant. You could do it with the For task of ant-contrib.

    <project default="test">
    
      <taskdef resource="net/sf/antcontrib/antlib.xml">
        <classpath>
          <pathelement location="C:/lib/ant-contrib/ant-contrib-1.0b3.jar"/>
        </classpath>
      </taskdef>
    
      <target name="test">
        <for list="${enableProperties}" param="prop">
          <sequential>
             <property name="@{prop}" value="true"/>
          </sequential>
        </for>
        <for list="${enableProperties}" param="prop">
          <sequential>
             <echo message="@{prop}=${@{prop}}"/>
          </sequential>
        </for>
      </target>
    
    </project>
    

    Output:

    $ ant -DenableProperties=abc,def,ghi,jkl
    Buildfile: build.xml
    
    test:
         [echo] abc=true
         [echo] def=true
         [echo] ghi=true
         [echo] jkl=true
    
    BUILD SUCCESSFUL
    Total time: 0 seconds
    
    0 讨论(0)
  • 2021-01-11 15:18

    How to decide when an item of your property $enableproperties is to be set to false or true ?
    Some criteria missin..
    From my understanding of your question you might try something like that, my solution is based on Ant plugin Flaka

    starting with ant -f demo.xml -Denableproperties=abc#t,def#t,ghi,jkl#t,mno
    means all items in the list that should be set to true in your script have to be propertyname#t
    others will be set to false

    <project name="demo" xmlns:fl="antlib:it.haefelinger.flaka">
    
        <fl:for var="p" in="split('${enableproperties}', ',')">
          <fl:let>#{split(p, '#')[0]} := #{split(p, '#')[1] == 't' ? 'true' : 'false'}</fl:let>
        </fl:for>
    
        <echo>
    $${abc} = ${abc}
    $${def} = ${def}
    $${ghi} = ${ghi}
    $${jkl} = ${jkl}
    $${mno} = ${mno}
        </echo>
    
    </project>
    

    output

     [echo] ${abc} = true
     [echo] ${def} = true
     [echo] ${ghi} = false
     [echo] ${jkl} = true
     [echo] ${mno} = false
    

    Disclosure = i'm participating as committer in the Flaka project

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