Заполнитель для замены значения / версии / даты в xml с использованием Ant build - PullRequest
0 голосов
/ 14 декабря 2018

У меня более 30 файлов odx-d (odx-d - это просто XML-файл с другим расширением).Все файлы имеют общие теги:

<DOC-REVISION>
    <REVISION-LABEL>01.02.03-04</REVISION-LABEL>
    <STATE>RELEASE</STATE>
    <DATE>2018-11-14T16:26:00+01:00</DATE>
</DOC-REVISION>

В каждом выпуске мне нужно изменять эти значения во всех файлах.

Примечание: манипулирование с использованием Java невозможно, так как во время сборки просто сделать zip из всехэти файлы, не использующие Java для манипулирования этими файлами.

Пожалуйста, предложите способ иметь один файл (любой тип файла, который вы предлагаете), где я мог бы иметь эти значения и разместить держатели для тегов во всех этих файлах.

Спасибо.!

Ответы [ 2 ]

0 голосов
/ 19 декабря 2018

Решение для нескольких файлов.

  1. Замените значения заполнителями @ revision @, @ state @, @ date @ и поместите в папку шаблонов.

  2. Выполните операцию копирования с набором фильтров из шаблона в каталог dest.

Пример: Template dir: 'fromDir', назначение: 'toDir'

1) Файлы шаблонов:

<DOC-REVISION>
    <REVISION-LABEL>@revision@</REVISION-LABEL>
    <STATE>@state@</STATE>
    <DATE>@date@</DATE>
</DOC-REVISION>

2) Объявите свойства и выполните целевую операцию тестирования.

<!-- Properties -->
<property name="version" value="01.02.03-04" />
<property name="state" value="RELEASE" />
<tstamp>
    <format property="now" pattern="yyyy-MM-dd'T'HH:mm:ss.SSSXXX"/>
</tstamp>

<!-- Target -->
<target name="test">
    <copy todir="${toDir}">
        <fileset dir="${fromDir}" />
        <filterset>
            <filter token="revision" value="${version}" />
            <filter token="state" value="${state}" />
            <filter token="date" value="${now}" />
        </filterset>
    </copy>
</target>

Спасибо!

0 голосов
/ 15 декабря 2018

Это можно сделать, выполнив следующие действия:

  1. замените значения общего тега на заполнители, например @revision@, @state@, @date@

  2. копировать каждый файл во временную папку

  3. выполнить замены в скопированных файлах, используя задачу <replace file="${dest.file}"> с вложенными <replacefilter .../> элементами

  4. архивировать преобразованные файлы во временную папку

Например, используя файл шаблона "template.xml", например:

<DOC-REVISION>
    <REVISION-LABEL>@revision@</REVISION-LABEL>
    <STATE>@state@</STATE>
    <DATE>@date@</DATE>
</DOC-REVISION>

, вы можетеустановите реальные значения с помощью этой цели муравья (пропуская часть zip):

  <target name="test">
    <property name="my.revision" value="01.02.03-04"/>
    <property name="my.state" value="RELEASE"/>
    <tstamp>
      <format property="my.date" pattern="yyyy-MM-dd hh:mm z"/>
    </tstamp>
    <property name="template.file" value="./template.xml"/>
    <property name="dest.file" value="./doc.odx"/>
    <delete file="${dest.file}" quiet="true"/>
    <copy toFile="${dest.file}" file="${template.file}"/>
    <replace file="${dest.file}">
      <replacefilter token="@revision@" value="${my.revision}"/>
      <replacefilter token="@state@" value="${my.state}"/>
      <replacefilter token="@date@" value="${my.date}"/>
    </replace>
  </target>
...