Можно ли переопределить nant целей из включенного файла сборки? - PullRequest
7 голосов
/ 21 июля 2009

У меня есть общий файл common.xml, который содержит несколько общих целей nant, которые повторно используются в нескольких сборках. Я хочу «переопределить» некоторые из этих nant целей и включить дополнительные шаги до или после выполнения существующей цели.

Сначала используются nant цели из текущего файла? то есть. Если я создаю цель nant в текущем файле сборки с тем же именем, что и цель во включенном файле, вызывается ли эта, а игнорируемая? Если это так, я могу просто сделать и вызвать включенную цель, но кажется, что это будет рекурсивный вызов, а не включенная задача.

Мысли

Ответы [ 2 ]

3 голосов
/ 05 марта 2010

У меня был тот же вопрос (и нашел те же результаты), но я также нашел обходной путь. Позвольте мне проиллюстрировать это примером.

У вас есть ProjectFile.build и CommonFile.build. Допустим, вы хотите перезаписать цель под названием «Очистить».

Вам потребуется создать новый файл (назовите его CommonFile_Clean.build), который содержит:

<?xml version="1.0"?>
<project>
  <target name="Clean">
        <echo message="Do clean stuff here" />
  </target>
</project>

В CommonFile.build вы условно включаете CommonFile_Clean.build:

.
<?xml version="1.0"?>
<project>
    <echo message="checking Clean definition..." />
    <if test="${not target::exists('Clean')}">
            <echo message="Clean target not defined." />
        <include buildfile="CommonFile_Clean.build" />      
    </if>
</project>

В ProjectFile.build вы можете определить цель Clean (в этом случае CommonFile_Clean.build не будет использоваться) или использовать реализацию по умолчанию, как определено в CommonFile_Clean.build.

Конечно, если у вас большое количество целей, это будет довольно трудоемко.

Надеюсь, это поможет.

2 голосов
/ 17 февраля 2010

Нет, я только что попробовал это для вас, так как у меня есть аналогичная установка, в которой у меня есть все цели сборки, которые мы используем в commonFile.build, а затем использую следующий код для его ввода. ..

<include buildfile="../commonFile.build"/>

В моем newFile.build (который включает в себя commonFile.build в верхней части файла) я добавил новую цель под названием «build», так как она существует в commonFile, и вот сообщение об ошибке, которое вы получаете в ответ. ..

СТРОИТЬ НЕ УКАЗАНО

Повторяющаяся цель с именем 'build'!

Хорошая идея, возможно, основанная на принципах ОО, но, к сожалению, она не работает.

Хорошо?

...