Для этого вы можете использовать инструментальные средства Ant.
<property name="arg_list" value="foo bar hello world"/>
<resources id="arguments">
<mappedresources>
<string value="${arg_list}" />
<filtermapper>
<replacestring from=" " to=" -j "/>
</filtermapper>
</mappedresources>
</resources>
<property name="arguments" value="-j ${toString:arguments}" />
Приведенное выше приведёт к получению свойства arguments
со значением -j foo -j bar -j hello -j world
, которое затем может быть использовано в exec
arg
line.
Альтернативно pathconvert
task может помочь в этом отношении:
<property name="arg_list" value="foo bar hello world"/>
<pathconvert property="arguments" pathsep=" ">
<chainedmapper>
<flattenmapper />
<regexpmapper from="(.*)" to="-j \1" />
</chainedmapper>
<filelist files="${arg_list}" />
</pathconvert>
Если у вас есть абсолютные пути, а не только строки в списке, тогдаудалите flattenmapper
.
Если у вас есть относительные пути, замените строку flattenmapper
на:
<globmapper from="${basedir}/*" to="*" />
, чтобы предотвратить преобразование путей в абсолютные.
В случае, если у вас есть UNIX-подобные пути в arg_list в системе Windows, настройки по умолчанию для pathconvert не будут работать - пути преобразуются в стиль Windows.Вместо этого для обработки списка используйте:
<pathconvert property="arguments" pathsep=" " targetos="unix">
<chainedmapper>
<regexpmapper from="C:(.*)" to="-j \1" />
</chainedmapper>
<filelist files="${arg_list}" />
</pathconvert>
Обратите внимание на настройку targetos
и пересмотренное выражение regexmapper from.