Наследование набора свойств Ant с помощью вложенных задач - PullRequest
2 голосов
/ 26 августа 2010

У меня есть набор вложенных файлов сборки Ant, и мне нужно контролировать, какие свойства наследуются каждой «под» задачей.Я пытаюсь определить их как наборы свойств (чтобы код был управляемым), но они не наследуются подзадачами, в отличие от свойств.

Пример ниже демонстрирует проблему: foo.* копируется в промежуточный проект, ноне в нижней части проекта.Если я определю каждое свойство, которое должно быть унаследовано явно, например bar.*, оно будет унаследовано и нижним проектом.

Есть ли способ получить группу свойств, которые будут наследоваться полностью, в том же духе?как отдельные свойства делают?Не переписывая подпроцессы, могу ли я попробовать что-то еще?

[top.xml]

<?xml version="1.0"?>
<project name="test-top">
    <property name="foo.1" value="1"/>
    <property name="foo.2" value="2"/>
    <property name="bar.1" value="1"/>
    <property name="bar.2" value="2"/>

    <ant antfile="middle.xml" inheritall="false">
        <propertyset>
            <propertyref prefix="foo."/>
        </propertyset>
        <property name="bar.1" value="${bar.1}"/>
        <property name="bar.2" value="${bar.2}"/>
    </ant>
</project>

[middle.xml]

<?xml version="1.0"?>
<project name="test-middle">

    <echo>foo ${foo.1} ${foo.2}</echo>
    <echo>bar ${bar.1} ${bar.2}</echo>

    <ant antfile="bottom.xml" inheritall="false"/>
</project>

[bottom.xml]

<?xml version="1.0"?>
<project name="test-bottom">

    <echo>foo ${foo.1} ${foo.2}</echo>
    <echo>bar ${bar.1} ${bar.2}</echo>

</project>

[ВЫХОД муравья -f top.xml]

 [echo] foo 1 2
 [echo] bar 1 2
 [echo] foo ${foo.1} ${foo.2}
 [echo] bar 1 2

Ответы [ 2 ]

2 голосов
/ 26 августа 2010

Я думаю, что решение Александра близко. Как насчет этого, хотя, не нужно никаких изменений в middle.xml или bottom.xml.

Идея состоит в том, чтобы использовать задачу echoproperties, чтобы «развернуть» набор свойств к отдельным свойствам, а затем использовать его в вызове задачи ant.

Перед вызовом middle.xml напишите свойство, изложенное примерно так:

<echoproperties destfile="myproperties.txt">
    <propertyset>
        <propertyref prefix="foo."/>
        <propertyref prefix="bar."/>
    </propertyset>
</echoproperties>

Затем позвоните в middle.xml:

<ant antfile="middle.xml" inheritall="false">
    <property file="myproperties.txt" />
</ant>

Свойства, предоставленные для задачи муравья наследуют вплоть до , как вы говорите, поэтому вам нужно только изменить top.xml:

Эти свойства становятся эквивалентными свойства, которые вы определяете в команде линия. Это специальные свойства и они всегда будут переданы, даже через дополнительные <<em> ant > задачи с Значение атрибута attributeit установлено в false (см. выше).

1 голос
/ 26 августа 2010

В файле top.xml вы можете создать файл с наследуемыми свойствами, используя задачу <propertyfile>.

Затем вы можете загрузить этот файл с <property file="..."/> в каждый из ваших подмодулей.

...