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

Dav*_*ave 11 ant

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

-DenableProperties=abc,def,ghi,jkl
Run Code Online (Sandbox Code Playgroud)

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

<property name="abc" value="???" />
<property name="def" value="???" />
Run Code Online (Sandbox Code Playgroud)

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

谢谢, - 戴夫

sud*_*ode 13

想不出在核心Ant中这样做的方法.你可以使用ant-contrib 的For任务来完成它.

<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>
Run Code Online (Sandbox Code Playgroud)

输出:

$ 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
Run Code Online (Sandbox Code Playgroud)