У меня есть задача ant, которая использует задачу применения для запуска сценария для группы файлов.
У меня есть структура каталогов, похожая на эту: mkdir -p a/{b,c,d,e}/f
Обычно(если я не передаю аргументы), я бы хотел, чтобы ant работал на всех f
s.То есть, если я позвонил ant mytask
, он должен обработать: a/b/f, a/c/f, a/d/f, a/e/f
.Это уже работает с использованием apply и patternsets.
Однако, когда я передаю ему необязательный аргумент, называемый foo
, он должен вызывать скрипт только на a/foo/f
.
Так что, если я вызвал ant mytask -foo b
, он должен обрабатывать только a/b/f
, а не остальные.
Я прочитал эту публикацию SO , которая объясняет способы передачи аргументов, и я посмотрел документацию по antотносительно свойств и условных .Но я все еще не могу собрать их вместе таким образом, чтобы это работало.
Кроме того, я не хочу использовать одно из предложений SO, приведенных выше, в котором приводятся такие аргументы:
<arg value="${arg0}"/>
<arg value="${arg1}"/>
Я хочу иметь возможность назвать его как ant mytask -foo valueoffoo
для любого произвольного foo
.
Спасибо.
Я попробовал предложение Мартина Клейтона ниже, и у меня есть такой код:
<target name="mytask">
<property name="foo" value="*" />
<apply executable="perl">
<arg value="somescript"/>
<dirset id="them" dir="a">
<include name="${foo}/*/f" />
</dirset>
</apply>
</target>
Вышесказанное делает то, что я хочу.
Примечание 1: В моем реальном коде я использую набор шаблонов вместо dirset, но он должен работать так же.
Примечание2: в моем оригинальном вопросе я сказал, что структура каталога была a/{b,c,d,e}/f
.На самом деле все немного сложнее, поэтому *
во включенном выше.Я пропустил это в первый раз, потому что это не казалось уместным.