Я пытаюсь записать метку времени в качестве параметра контекста в свой context.xml, и тогда я выполняю свой Ant-скрипт.

Я пробовал следующее:

Мой context.xml

<Parameter name="deployingTimeStamp" 
    value="16.07.2012" <!-- shall be changed! -->
    override="true" />

Мой build.xml

<tstamp>
    <format property="time" pattern="dd.MM.yyyy"
    unit="hour"/>
</tstamp>

<replace file="${conf.dir}/dev/context.xml" >
    <replacefilter token="deployingTimeStamp" value="${time}" />
</replace>

К сожалению, он не заменяет значение, он просто заменяет само имя «deployingTimeStamp» и меняет его на текущую дату.

Как я могу решить эту проблему?

1
RockaRolla 16 Июл 2012 в 19:33

1 ответ

Лучший ответ

Токен replacefilter заменит указанный вами токен. Почему бы вам не добавить значение-заполнитель в XML (например, [[buildTimeStamp]]), а затем использовать:

<replace file="${conf.dir}/dev/context.xml" >
    <replacefilter token="[[buildTimeStamp]]" value="${time}" />
</replace>

Итак, ваш исходный xml будет

<Parameter name="deployingTimeStamp" 
value="[[buildTimeStamp]]" <!-- shall be changed! -->
override="true" />

Дополнительные советы, основанные на обсуждении комментариев:

Возможно, вы не копируете свои основные исходные файлы в каталог сборки, чтобы сначала выполнить замену. Это довольно стандартно для сценариев сборки, поэтому я упомянул, что вы сначала проверяете свои файлы вне системы управления версиями. Если вы не используете систему управления версиями и у вас есть папка на вашем компьютере, вам необходимо сначала скопировать файлы из этой папки в другую папку, прежде чем выполнять замену и другую упаковку приложения.

  <copy todir="../dest/dir">
    <fileset dir="src_dir" excludes="**/*.java"/>
  </copy>

Что-то вроде выше, где вы копируете исходный код в рабочий каталог. ЗАТЕМ вы выполняете с ним свои действия, а затем удаляете его, когда у вас есть пакет (например, файл jar или файл войны или что-то еще, если java). Вы также можете просмотреть функциональные возможности удаления в документации Ant:

0
Mike S. 17 Июл 2012 в 17:28
В наших файлах сборки мы используем токены, такие как @ TIMESTAMP @, но вы можете использовать любую строку, которая не может быть дублирована где-либо еще.
 – 
Mike S.
16 Июл 2012 в 19:43
Да, это сработает один раз - после этого заполнитель будет перезаписан, и в следующий раз, когда я выполню свой сценарий Ant, этот заполнитель больше не будет существовать
 – 
RockaRolla
16 Июл 2012 в 20:08
Обычно вы строите из исходного кода или из системы контроля версий, поэтому вы устанавливаете этот параметр в системе контроля версий, и ваш Ant-скрипт проверяет код для каждой сборки. Мы используем Hudson (непрерывная интеграция), он проверяет код, а затем выполняет сценарии сборки, но это стандартная практика.
 – 
Mike S.
16 Июл 2012 в 20:09
Это означает, что вы также устанавливаете версию своего файла build.xml в основной части исходного кода, чтобы он проверялся при сборке.
 – 
Mike S.
16 Июл 2012 в 20:10
Спасибо за ответ, Майк, но я думаю, это не поможет мне решить мою проблему. Что вы имеете в виду под Хадсоном? Я этого не знаю.
 – 
RockaRolla
17 Июл 2012 в 12:34