перезагрузка свойств после обновления файла свойств - PullRequest
3 голосов
/ 01 февраля 2012

Я пытаюсь прочитать свойство после его обновления с помощью задачи propertyfile.Что-то вроде

<property file="test.properties" />
<echo>before :: ${modules}</echo>

<propertyfile file="test.properties" >
   <entry key="modules" type="string" operation="+" value="foo" />
</propertyfile>

<property file="${status.path}/test.properties" />
<echo>after :: ${modules}</echo>.

Кажется, он не загружается во второй раз.Но файл свойств обновляется.

Ответы [ 6 ]

6 голосов
/ 07 июня 2014

Вы можете вызвать новую среду выполнения ant с помощью задачи antcall, которая игнорирует свойства основной целевой среды выполнения - просто убедитесь, что вы включили inheritAll="false"

<target name="main">
    <property file="test.properties"/>
    <echo>before :: ${modules}</echo>

    <propertyfile file="test.properties">
        <entry key="modules" type="string" operation="+" value="foo" />
    </propertyfile>

    <antcall target="second-runtime" inheritAll="false"/>
</target>

<target name="second-runtime">
    <property file="${status.path}/test.properties" />
    <echo>after :: ${modules}</echo>
</target>

antcall refrence

2 голосов
/ 02 февраля 2012

Как уже упоминалось в sudocode, свойства Core Ant неизменны - по уважительным причинам.
С помощью задачи unset из Задача Ant Antelope s вы можете сбросить все свойства, заданные в файле, с одним вкладышем:

<unset file="test.properties"/>

потом

<propertyfile file="test.properties" >
   <entry key="modules" type="string" operation="+" value="foo" />
</propertyfile>

будет работать.

Подсказка: задача работает только для обычных свойств, а не для xmlproperties.
Но есть простой обходной путь, просто используйте
<echoproperties prefix="..." destfile="foo.properties"/>
, а затем
<unset file="foo.properties"/>
Если вы не хотите использовать Antelope только для этой конкретной задачи, вы можете написать макрос или собственную задачу с похожими функциями.

1 голос
/ 31 октября 2012

В этом случае, когда весь файл свойств загружается дважды, я предлагаю использовать разные префиксы для первой и второй загрузки. Первая загрузка с атрибутом prefix , равным first. Получите доступ к свойствам с этим префиксом, то есть свойство foo будет доступно как first.foo. Затем сохраните файл свойств и загрузите снова, но на этот раз без префикса. Вы получите модифицированные свойства в подходящем месте.

Без использования префикса вторая загрузка ничего не сделает, так как ant предотвращает переопределение свойств. Другие уже указали на это.

0 голосов
/ 30 апреля 2015

вы можете создать новый файл свойств и сохранить свойство в новом файле.

Укажите ссылку на файл в следующей строке.

Готово:)

0 голосов
/ 31 октября 2012

этот макрос позволяет изменить значение свойства после фиксированного

<macrodef name="set" >
    <attribute name="name"/>
    <attribute name="value"/>
    <sequential>
        <script language="javascript">
            <![CDATA[
            project.setProperty("@{name}", "@{value}");
            ]]>
        </script>
    </sequential>
</macrodef>
0 голосов
/ 01 февраля 2012

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

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