как вызвать цель муравья при переопределении цели в дочернем файле - PullRequest
24 голосов
/ 13 сентября 2011

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

похож на это:

<project name="some-portlet" basedir="." default="deploy">  
  <import file="../build-common-portlet.xml" />
  <target name="test">
    <echo message="do foo"/>
    RUN TEST FROM PARENT HERE
  </target>
  </project>

Теперь я хочу переопределить родительскую цель теста следующим образом:

  • сделать необходимое копирование банок
  • запустить тестовую цель из родительского файла

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

Я хочу, чтобы цель также называлась test, чтобы CI мог просто запустить цель теста.

есть ли способ вызвать test в ../build-common-portlet.xml?

Ответы [ 2 ]

26 голосов
/ 13 сентября 2011

Самый простой способ - использовать зависимость от родительского теста.

Для этого важно, чтобы <project> атрибут name синхронизировался с его именем файла (хорошо, это, строго говоря, не обязательно, но значительно улучшает удобочитаемость и удобство обслуживания вашего скрипта).

Так в build-common-portlet.xml:

<project
  name="build-common-portlet" <-- note the name
  ...
>
  <target name="test">
    <echo message="Calling parent test target"/>
    ...
  </target>
</project>

Таким образом, вы можете просто сделать:

<project name="some-portlet" basedir="." default="deploy">  
  <import file="../build-common-portlet.xml" />
  <target name="test"
    depends="build-common-portlet.test" <-- note parent specification
  >
    <echo message="do foo"/>
    RUN TEST FROM PARENT HERE
  </target>
</project>

>> В ответ на комментарий

Если вы хотите выполнить какую-то работу до запуска родительского теста, просто создайте новую цель и установите зависимость от нее до родительского теста:

<project name="some-portlet" basedir="." default="deploy">  
  <import file="../build-common-portlet.xml" />

  <target name="copy-jars">
    <echo message="copying jars"/>
  </target>

  <target name="test"
    depends="
      copy-jars,
      build-common-portlet.test
    "
  />
</project>
6 голосов
/ 15 сентября 2011

Я нашел решение, которое будет запускать мои команды, а затем вызывать test из родительского файла ant.Переопределите тест родителя, затем вызовите, когда родительский тест выполнил вашу собственную «магию».

Можно также назвать цели всех других родителей.

Так что для кого-то, кто не знает вашего муравьяфайл, она может вызвать муравей тест, как он ожидал.

<project name="some-portlet" basedir="." default="deploy">
        <import file="../build-common-portlet.xml" />
<target name="test">
        <echo message="do foo"/>
        <ant antfile="../build-common-portlet.xml" target="test"/>
</target>
</project>
...