Как я могу перебирать свойства из файла?

Все мои проекты и их версии определены в файле свойств следующим образом:

ProjectNameA=0.0.1
ProjectNameB=1.4.2

Я хотел бы повторить все проекты и использовать их имена и версии в Ant script.

В настоящее время я читаю весь файл с помощью задачи property, затем перебираю по данному списку в цикле for следующим образом:

<for list="ProjectNameA,ProjectNameB" param="project">
   <sequential>
    <echo message="@{project} has version ${@{project}}" />
   </sequential>
</for>

Как я могу избежать жесткого кодирования имен проектов в цикле for? В основном, итерация по каждой строке и извлечение имени и версии проекта по мере того, как я иду.

Ответы

Ответ 1

Увидев, что вы уже используете antcontrib for, как насчет использования задачи propertyselector:

<property file="properties.txt" prefix="projects."/>
<propertyselector property="projects" match="projects\.(.*)" select="\1"/>

<property file="properties.txt" />
<for list="${projects}" param="project">
    ...
</for>

Идея здесь состоит в том, чтобы прочитать свойства один раз с префиксом projects и использовать полученный набор свойств для создания списка проектов, разделенных запятыми, с задачей propertyselector. Затем свойства перечитываются без префикса, так что цикл for может действовать как и раньше.

Ответ 2

То, что вы хотите иметь в виду, если вы читаете дополнительные файлы .property(помимо build.properties), это определение области. Если вы прочитаете дополнительный файл (через тег property file = "foo.property" ), ant покажет, что файл был прочитан, и свойства загружены. Однако, когда вы переходите к ним, они становятся неопределенными.