ANT - запустить одну цель, но без зависимостей - PullRequest
8 голосов
/ 28 мая 2009

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

Ответы [ 5 ]

11 голосов
/ 28 мая 2009

Создайте версию цели без учета ошибок. Если бы у вас было

<target name="A" depends="B">
   ...
</target>

Изменить на

<target name="A" depends="B,AwithoutDeps"/>

<target name="AwithoutDeps">
    ...
</target>

Теперь вы можете вызывать A как обычно (что вызовет отключение B, затем AwithoutDeps) или просто явно вызвать AwithoutDeps, и никакие команды не будут запущены. [Обратите внимание, что «зависящий» вызывает зависимости по порядку]

Конечно, выберите несколько лучших имен, чем эти;)

2 голосов
/ 28 мая 2009

Одной из возможностей является использование атрибута if или unless для цели (ей) зависимости. Например:

<target name="dependency1" unless="dependency1.disabled">
  <echo>Hello from dependency 1!</echo>
</target>

<target name="dependency2" unless="dependency2.disabled">
  <echo>Hello from dependency 2!</echo>
</target>

<target name="main-target" depends="dependency1, dependency2">
  <echo>Hello from the main target!</echo>
</target>

Теперь вы можете запустить Ant с -Ddependency1.disabled=true и / или -Ddependency2.disabled=true, чтобы исключить нежелательные зависимости, но по умолчанию все равно будет их включать.

И, конечно, вы можете просто иметь "глобальное" свойство dependencies.disabled, если вам будет проще.

Если вы хотите выполнить обратное этого поведения (где зависимости исключены по умолчанию), просто используйте if вместо unless (и имейте имена свойств, такие как "dependency1.enabled "вместо" отключено ").

2 голосов
/ 28 мая 2009

Я думаю, что ваш единственный простой выбор здесь состоит в том, чтобы просто сделать копию целевой цели и сделать так, чтобы она не имела зависимостей.

1 голос
/ 28 мая 2009

Я бы сделал что-то вроде этого:

<target name="doSomethingNoDeps">
   ...
</target>

<target name="doSomething" depends="doSomeOther">
  <antcall target="doSomethingNoDeps"/>
</target>
0 голосов
/ 06 декабря 2017

Я сделал макрос с куском кода, что я хочу. Затем сделал 2 цели, 1 вызывает макрос с «arg1», 2 с «arg2». Вы также можете сделать макрос без принятия параметров.

<macrodef name="macro-jar">
    <attribute name="dir" />
    <sequential>
        <jar destfile="${jar.name}">
            <fileset dir="@{dir}" .../>
            ...
            ...
        </jar>
    </sequential>
</macrodef>

Вызов из 2-х мест в коде:
Первый:

<macro-jar dir="${dir.build}" />

второй:

<macro-jar dir="${dir.temp}" />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...