2010-08-26 3 views
2

У меня есть набор вложенных файлов сборки Ant, и мне нужно контролировать, какие свойства наследуются каждой «под» задачей. Я пытаюсь определить их как propertysets (чтобы сохранить управляемый код), но они не наследуются подзадачами, в отличие от свойств.Наследование набора свойств 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

Я думаю, что решение Александра близко. Как об этом, однако, не требуется никаких изменений в 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> 

Свойства, подаваемого на муравьиные задачи inherit all the way down как вы говорите, так что вам нужно всего лишь изменить top.xml:

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

+0

Спасибо, Мартин, и Александр. Я задавался вопросом о написании свойств в файле, но не видел никакого способа сделать это, не заново перечисляя все свойства, которые я хотел передать (т. Е. Не лучше, чем решение для 'bar. *' Above). Я пропустил задачу «echoproperties» из-за того, что она была указана в разделе «Необязательные задачи», а не «Основные задачи» в документации Ant ...теперь я знаю! –

1

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

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

Смежные вопросы