Запись файла свойств Ant не соответствует его значению - PullRequest
2 голосов
/ 11 июня 2010

У меня есть значение в файле свойств, которое я хочу увеличить во время сборки.Цель состоит в том, чтобы скопировать набор файлов и добавить номер перед каждым, чтобы сохранить порядок, в котором они были скопированы в каталог.Я использую задачу <propertyfile> следующим образом:

<propertyfile file="jsfiles.properties">
    <entry  key="file.number" type="int" operation="=" value="10" />
    <entry  key="file.number" type="int" default="010" operation="+" value="10" pattern="000" />
</propertyfile>

Затем я делаю копию:

<copy todir="${js-in.dir}">
    <resources>
        ...
    </resources>
    <chainedmapper>
        <flattenmapper />
        <globmapper from="*.js" to="${file.number}-*.js"/>
    </chainedmapper>
</copy>

Это делает именно то, что мне нужно, за исключением того, что вместо следующего вывода:

  • 010-file1.js
  • 020-file2.js
  • 030-file3.js
  • ...

Я получаю:

  • $ {file.number} -file1.js
  • $ {file.number} -file2.js
  • ${file.number} -file3.js
  • ...

Что я делаю не так?

Обновление : по одному изответы ниже, более простой случай:

<propertyfile file="jsfiles.properties">
    <entry  key="file.number" type="int" operation="=" value="10" />
    <entry  key="file.number" type="int" default="0010" operation="+" value="10" pattern="0000" />

</propertyfile>

<target name="concat">
    <echo>${file.number}</echo>
</target>

Печать [echo] ${file.number}

Ответы [ 3 ]

4 голосов
/ 10 мая 2012

Я обнаружил, что задача <propertyfile> сама по себе не загружает значения свойств, она просто редактирует указанный файл свойств.
Для загрузки значений свойств используется <property> задача:
<property file="jsfiles.properties" />
Поэтому добавьтестрока сразу после </propertyfile> для загрузки значений

1 голос
/ 15 июня 2010

<propertyfile file="jsfiles.properties">
  <entry  key="file.number" type="int" operation="=" value="10" />
  <entry  key="file.number" type="int" default="010" operation="+" value="10" pattern="000" />
</propertyfile>

используется для увеличения значений в файлах свойств.Я не знаю, связано ли это с вашей проблемой.Вы должны быть в состоянии найти jsfiles.properties на диске в вашем $ {basedir}

Причина, по которой вы получаете $ {file.number} -file1.js, заключается в том, что нет переменной noe с таким именем вне файла свойствcontext.

Я пробовал это:

<target name="copy">
  <property name="indexStart" value="10"/>      
  <echo message="About to copy file from ${basedir}" /> 
  <copy todir="tmp" overwrite="true">
    <fileset dir="${basedir}" includes="*.js" />            
    <scriptmapper language="javascript">
      var i = parseInt(project.getProperty('indexStart'));          
      self.addMappedName(i+'_'+source);                 
      project.setProperty('indexStart', i+10);              
    </scriptmapper>         
  </copy>   
</target>

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

0 голосов
/ 14 июня 2010

Можете ли вы проверить, вызвав счетчик build.number в propertyfile и

<globmapper from="*.js" to="${build.number}-*.js"/> 

UPDATE

Поцарапайте ответ выше. Если вы выполните <echo>${file.number}</echo> после обновления <propertyfile>, оно отобразится как $ {file.number}, а не как значение. Это проблема, которую нужно исправить.

Разница в вашей конфигурации и моей - перевод строки после 2-го и </propertyfile>. Я добавил еще одну пустую строку после <entry>, и <echo>${file.number}</echo> теперь отображается правильно.

<entry key="file.number" type="int" default="010" value="010" operation="+" pattern="000" /> 

</propertyfile>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...