Как я могу зависеть от родительской цели из вложенного проекта ant?

Дано построение.XML-файл:

<project name="main" default="build">

<target name="main.init"/>
<extension-point name="init.tasks" depends="main.init"/>
<target name="init" depends="init.tasks"/>

<extension-point name="build.tasks" depends="init"/>
<target name="build" depends="build.tasks"/>

<include file="subsystem1.xml"/>
<include file="subsystem2.xml"/>
</project>

И подсистема x.xml с чем-то вроде:

<project name="subsystemX">
<task name="init" extensionOf="init.tasks"/>
<task name="build" depends="init" extensionOf="build.tasks"/>
</project>

Могу сейчас сказать ant buildи все подсистемы пройдут initи buildкак ожидалось.

Однако я также хотел бы иметь возможность сказать ant subsystem.buildи построить только эту подсистему. Проблема в том, что каждая подсистема buildзависит от всех других подсистем init. В этом случае однако subsystem.initбудет выполняться только то, как ant просто смотрит на subsystem.buildзависимости.

В идеале я хотел бы добавить main initв качестве зависимости к buildзадаче каждой подсистемы, но includeслепо добавляет «subsystem.»к каждому имени задачи и зависит запись, так что я, кажется, не в состоянии ссылаться на что-либо вне.

Как я могу subsystem.buildзависеть от основной initзадачи?

Метки

1 ответ

  1. Я использую обходной путь:

    В строй.xml, я добавляю дополнительные цели для каждого включенного файла:

    <target name="subsystem1.global.init" depends="main.init"/>
    <target name="subsystem1.all.init" depends="init"/>
    <include file="subsystem1.xml" as="subsystem1"/>
    
    <target name="subststem2.global.init" depends="main.init"/>
    <target name="subsystem2.all.init" depends="init"/>
    <include file="subsystem2.xml" as="subsystem2"/>
    

    Затем в подсистемх.xml, я могу зависеть от » global.инит » и » все.инит», например

    <project name="subsystemX">
    <task name="init" depends="global.init" extensionOf="init.tasks" />
    <task name="build" depends="init, all.init" extensionOf="build.tasks"/>
    </project>
    

    Как вы можете видеть, это не масштабируется хорошо, и я все еще надеюсь найти лучшее решение.