问题 Ant:如何从命令行传入的逗号分隔列表中设置属性?


我正在使用Ant 1.8.1。如果我在命令行上传递一个参数...

-DenableProperties=abc,def,ghi,jkl

如何在Ant脚本中设置单个属性(为true / false)?

<property name="abc" value="???" />
<property name="def" value="???" />

请注意,在上面的示例中,我希望Ant可以访问设置为true的属性“$ {abc}”,而如果它尝试访问属性“$ {mno}”,则该属性将为false,或者至少是一些非真实的价值。

谢谢, - 戴夫


3231
2018-06-16 14:53


起源



答案:


想不出在核心Ant中这样做的方法。你可以用它来做 为了任务 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>

输出:

$ 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

13
2018-06-16 16:40





如何确定何时将属性$ enableproperties的项设置为false或true?
一些标准错过..
从我对你的问题的理解,你可能尝试类似的东西,我的解决方案是基于 Ant插件Flaka

从ant -f demo.xml开始-Denableproperties = abc#t,def#t,ghi,jkl #t,mno
表示列表中应该在脚本中设置为true的所有项都必须是propertyname #t
 其他人将被设为假

<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>

产量

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

披露=我作为Flaka项目的提交者参与


1
2018-06-16 21:48