Ant: «Дублированное имя проекта при импорте» с импортированным файлом сборки - PullRequest
3 голосов
/ 19 декабря 2011

У меня есть несколько файлов сборки, которые все импортируют один и тот же базовый файл сборки, например:

base.xml:

<project name="base">
    <!-- does not define a 'build' target -->
</project>

buildA.xml:

<project name="buildA">
    <import file="base.xml" />
    <target name="build">
        <ant antfile="buildB.xml" target="build"
            inheritall="false" inheritrefs="false" />
    </target>
</project>

buildB.xml:

<project name="buildB">
    <import file="base.xml" />
    <target name="build">
        ...snip...
    </target>
</project>

(модуль A зависит от модуля B).

Теперь, приведенный выше вызов цели B build из buildA.xml выдает следующую ошибку:

Duplicated project name in import. Project base defined first in buildA.xml and again in buildB.xml

Поскольку оба buildA.xml и buildB.xml наследуют одно и то же base.xml , это кажется неизбежным.

Как я могу избавиться от этой ошибки?

Ответы [ 2 ]

2 голосов
/ 21 декабря 2011

Основываясь на ответе sudocode, я решил проблему.Поскольку абсолютный путь к base.xml отличается в обоих случаях, Ant не распознает его как один и тот же файл.Даже если inheritAll установлено на false, контекст вызывающей задачи сохраняется, и это вызывает конфликт имен.

Чтобы решить эту проблему, можно опустить атрибут name из базы ..xml .Начиная с Ant 1.8 задача import имеет атрибут as, который можно использовать для ссылки на базовые цели, когда базовый проект безымянный.Если вы не отменяете никаких целей, вы можете использовать , включая вместо import.Я на 1.7, так что это мне не поможет.

Для предыдущих версий Ant вы можете выполнить вызов exec , чтобы полностью предотвратить распространение контекста Ant (тогда вы получитедва запущенных экземпляра Ant).Еще лучше найти способ импортировать одинаковые base.xml (с одинаковым абсолютным путем) в оба файла.

1 голос
/ 20 декабря 2011

Используете ли вы Ant 1.6? Эта исправленная ошибка Ant выглядит так же.

EDIT

Я попытался воспроизвести структуру dir, на которую вы ссылаетесь в своем недавнем комментарии.

./base.xml
./buildA
./buildA/buildA.xml
./buildB
./buildB/buildB.xml

И соответственно изменил файлы сборки, например,

<project name="buildA">
<import file="../base.xml"/>
<target name="build">
  <ant antfile="../buildB/buildB.xml" target="build" inheritall="false" inheritrefs="false"/>
</target>
</project>

Я по-прежнему не получаю сообщение об ошибке сборки для ant 1.8.2 или 1.7.1:

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