Повторное использование и контроль исполнения в Ant - PullRequest
1 голос
/ 16 апреля 2011

Я думаю, что не должен "получать" муравья.Мне трудно понять, как реализовать повторное использование и контролировать выполнение последовательности целей.Пожалуйста, помогите.

Мне нужен сценарий сборки для создания двух сборок: отладочной сборки и производственной сборки.В настоящее время я использую antcall, чтобы обойти моё непонимание Ant.

Позвольте мне использовать псевдо-императивный код, чтобы описать, как я хочу, чтобы мои сборки проходили:

//this is my entry point
function build-production-and-debug() =
  prepare()
  build-production()
  build-debug()
  cleanup()

function build-production() =
  pre-process()
  compile()
  post-process()
  package("production")

function build-debug() =
  compile()
  package("debug")

Как мне подходить к этому с помощью Ant?

Ответы [ 2 ]

2 голосов
/ 16 апреля 2011

Может быть, вы можете поставить свой код муравья, чтобы дать лучший ответ.Но один из способов сделать это - использовать атрибут зависимости

<target name="prepare">
     //do something to prepare
</target>
<target name="cleanup">
    //do something to cleanup
</target>

<target name="build-production">
    //build production
</target>

<target name="build-debug">
    //build debug
</target>

<target name="build-production-debug" depends="prepare,build-production, build-debug, cleanup">
      //do something or nothing
</target>

. При этом вы сообщаете муравью, что перед выполнением цели «build-production-debug» вы должны сначала запустить все цели, перечисленные в«Зависимый» атрибут делает это в этом порядке.

1 голос
/ 20 апреля 2011

Вот схема того, что я придумал, я все еще использую antcall s, но только в качестве точки входа для параметризации моих сборок. Для меня ключевым открытием было использование условия if для цели, чтобы контролировать, выполняется ли цель, отмечая, что цели в ее цепочке зависимостей все еще выполняются. Задачи condition и isset также помогли в некоторых местах.

<project>
    <target name="-init">
    </target>

    <target name="-prod-preprocess" depends="-init" if="production">
    </target>

    <target name="-compile" depends="-prod-preprocess">
    </target>

    <target name="-package" depends="-compile">
    </target>

    <target name="build-prod">
        <property name="production" value="true" />
        <property name="package.dir" location="${production.package.location}"/>
        <antcall target="-package" />
    </target>

    <target name="build-debug">
        <property name="package.dir" location="${debug.package.location}"/>
        <antcall target="-package" />
    </target>

    <target name="build-both">
        <antcall target="build-debug" />
        <antcall target="build-prod" />
    </target>
</project>
...