Ant:如何从命令行中传入的逗号分隔列表中设置属性?
我使用的是Ant1.8.1。如果我在命令行上传入参数Ant:如何从命令行中传入的逗号分隔列表中设置属性?,ant,Ant,我使用的是Ant1.8.1。如果我在命令行上传入参数 -DenableProperties=abc,def,ghi,jkl 如何在Ant脚本中设置单个属性(true/false) <property name="abc" value="???" /> <property name="def" value="???" /> 请注意,在上面的示例中,我希望Ant能够访问设置为true的属性“${abc}”,而如果它试图访问属性“${mno}”,则该属性将为false,
-DenableProperties=abc,def,ghi,jkl
如何在Ant脚本中设置单个属性(true/false)
<property name="abc" value="???" />
<property name="def" value="???" />
请注意,在上面的示例中,我希望Ant能够访问设置为true的属性“${abc}”,而如果它试图访问属性“${mno}”,则该属性将为false,或者至少是true以外的某个值
谢谢,-Dave想不出在core 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>
如何决定将属性$enableproperties的项设置为false或true<缺少一些标准<根据我对您问题的理解,您可以尝试类似的方法,我的解决方案基于 从ant-f demo.xml-Denableproperties=abc#t,def#t,ghi,jkl#t,mno开始
意味着列表中所有在脚本中应设置为true的项都必须为propertyname#t
其他项将设置为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>
披露=我作为提交人参与Flaka项目
<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