我正在使用Ant 1.8.1。如果我在命令行上传递一个参数......
-DenableProperties=abc,def,ghi,jkl
如何在Ant脚本中设置单个属性(为true / false)?
<property name="abc" value="???" />
<property name="def" value="???" />
请注意,在上面的示例中,我希望Ant可以访问设置为true的属性“$ {abc}”,而如果它尝试访问属性“$ {mno}”,则该属性将是假的,或者至少是一些非真实的价值。
谢谢, - 戴夫
答案 0 :(得分:13)
无法想到在核心Ant中执行此操作的方法。你可以使用ant-contrib的For task来完成它。
<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
答案 1 :(得分:1)
如何确定属性$ enableproperties的项目何时设置为false或true?
一些标准错过了...
根据我对你的问题的理解,你可以尝试类似的东西,我的解决方案基于Ant plugin Flaka
从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>
输出
[echo] ${abc} = true
[echo] ${def} = true
[echo] ${ghi} = false
[echo] ${jkl} = true
[echo] ${mno} = false
披露=我作为Flaka项目的提交者参与