У меня есть система сборки, в которой многие компоненты одинаковы, поэтому я изменил ее, чтобы использовать «импорт» в общем файле для большинства задач сборки.Затем система сборки также должна создавать любые модули, от которых она зависит.Итак, у меня примерно ...
common.xml
project1.xml
- import common.xml
project2.xml
- include project1.xml
- import common.xml
В common.xml есть цель с именем build.Я хочу, чтобы project2 мог включать project1 и использовать точку расширения, чтобы установить зависимость от цели сборки.Но по какой-то причине он не распознает, что у project1 есть цель сборки.Если я изменю его, чтобы он зависел от цели, определенной в project1.xml, то это нормально.Но мне нужно иметь возможность указать цель, которая находится в common.xml.
Есть ли еще способ сделать это?
Нет ant-contrib.Раньше проект использовал это, но я пытаюсь избавиться от него, чтобы у нас не было ужасного процедурного кода для сборки системы.У проекта есть много случаев зависимостей, которые выглядят как ромб, и правильный график зависимостей (тот, который генерирует муравей автоматически) очень помог бы.
Поэтому я создал несколько простых файлов, чтобы проиллюстрировать мою проблему.
<project name="top" default="build">
<include file="mid.xml" as="mid" />
<target name="build">
<antcall target="mid.build" />
</target>
</project>
<project name="mid" default="build">
<!-- <target name="build"> -->
<!-- <echo message="build mid" /> -->
<!-- </target> -->
<import file="common.xml" />
</project>
<project name="common">
<target name="build">
<echo message="build common" />
</target>
</project>
Это не удалось.top.xml не может найти mid.build.Когда я запускаю ant -p для отображения списка целей, он показывает build и common.build.Поэтому я попытался добавить файл сборки mid.xml и получил его для правильной сборки.Теперь единственная проблема заключается в том, что если я раскомментирую приведенный выше XML для mid, чтобы определить собственный шаг сборки, он будет перезаписан при импорте и проигнорирован.Таким образом, он становится [build, common.build] вместо [build, mid.build].