Ant: Как установить свойства из списка, разделенного запятыми, который передается в командной строке?
Я использую Ant 1.8.1. Если я передал аргумент в командной строке...
-DenableProperties=abc,def,ghi,jkl
Как установить индивидуальные свойства (в true/false) в моем Ant script?
<property name="abc" value="???" />
<property name="def" value="???" />
Обратите внимание, что в приведенном выше примере я хотел бы, чтобы Ant имел доступ к свойству "$ {abc}", для которого установлено значение true, тогда как если он попытался получить доступ к свойству "$ {mno}", свойство будет ложным или, по крайней мере, значением, отличным от true.
Спасибо, - Дейв
Ответы
Ответ 1
Невозможно придумать способ сделать это в ядре 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
Ответ 2
Как решить, когда элемент вашего свойства $enableproperties должен быть установлен как false или true?
Некоторые критерии missin..
Из моего понимания вашего вопроса вы можете попробовать что-то подобное, мое решение основано на Ant плагин Flaka
начиная с ant -f demo.xml -Denableproperties = abС# t, def # t, ghi, jkl # t, mno
означает, что все элементы в списке, которые должны быть установлены в true в вашем script, должны быть указаны как имя_файла # 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