Переменная Ant @ не разрешена
Вот мой фрагмент build.xml
<target name="compile">
<for param="rsync.destination.host" list="${file}" delimiter="${line.separator}">
<sequential>
<echo message="${rsync.ssh.user}@@{rsync.destination.host}:${rsync.destination.base.dir}/"/>
</sequential>
</for>
</target>
Я получил следующий вывод,
compile:
[echo] root@{rsync.destination.host}:/tmp/
[echo] root@{rsync.destination.host}:/tmp/
BUILD SUCCESSFUL
Total time: 0 seconds
Так вот @{rsync.destination.host}
переменная не интерпретируется из-за двойного символа @@. Если я поставлю пространство между ними
<echo message="${rsync.ssh.user}@ @{rsync.destination.host}:${rsync.destination.base.dir}/"/>
тогда переменная разрешается, как и ожидалось.
compile:
[echo] root@ server1:/tmp/
[echo] root@ server2:/tmp/
BUILD SUCCESSFUL
Total time: 0 seconds
Так как в имени пользователя и на сервере есть место, будет исключение, если мы выполним здесь ssh. Есть идеи, как решить эту проблему.
2 ответа
В (основном) муравье нет переменных, но есть свойства и атрибуты.
@{foo} - это синтаксис для доступа к значению атрибута macrodef внутри macrodef. Так как antcontrib для задачи использует задачу ant macrodef, она имеет тот же синтаксис.
Попробуйте с:
...
<echo message="${rsync.ssh.user}@@@{rsync.destination.host}:${rsync.destination.base.dir}/"/>
...
означает использовать 3x @ вместо 2x @
Парам @{rsync.destination.host}
должен быть замаскирован вторым @, так что на самом деле вам нужно использовать @ 3 раза.
Вы можете поставить буквальный знак в свойстве:
<property name="at" value="@"/>
<echo message="${rsync.ssh.user}${at}@{rsync.destination.host}:${rsync.destination.base.dir}/"/>