Ant - Запустите Build.xml для всех подкаталогов - PullRequest
2 голосов
/ 23 мая 2011

У меня build.xml, расположенный на верхнем уровне, и я хочу, чтобы скрипт запускал цель для каждого подкаталога и передавал имя подкаталога в качестве параметра цели ANT.

Можете ли вы помочь? / ??

Спасибо

Ответы [ 4 ]

3 голосов
/ 23 мая 2011

Взгляните на задачу subant .С этой страницы:

    <project name="subant" default="subant1">
        <property name="build.dir" value="subant.build"/>
        <target name="subant1">
            <subant target="">
                <property name="build.dir" value="subant1.build"/>
                <property name="not.overloaded" value="not.overloaded"/>
                <fileset dir="." includes="*/build.xml"/>
            </subant>
        </target>
    </project>

этот файл сборки фрагмента будет запускать ant в каждом подкаталоге каталога проекта, где находится файл build.xml.Свойство build.dir будет иметь значение subant1.build в проектах ant, вызываемых subant.

2 голосов
/ 23 мая 2011

это может быть то, что вы ищете,

укажите это как одну из ваших целей в родительском build.xml

<target name="executeChildBuild">

    <ant antfile="sub1/build.xml" target="build" />
    <ant antfile="sub2/build.xml" target="build" />

</target>
1 голос
/ 23 мая 2011

Если я правильно прочитал вопрос, это может быть то, что вы ищете вместо этого.

Так для вашего примера ...

<target name="do-all">
    <antcall target="do-first">
       <param name="dir-name" value="first"/>
       <param name="intented-target" value="init"/>
    </antcall>
    <antcall target="do-first">
        <param name="dir-name" value="second"/>
        <param name="intented-target" value="build"/>
    </antcall>
    <antcall target="do-first">
        <param name="dir-name" value="third"/>
        <param name="intented-target" value="compile"/>
    </antcall>
</target>
<target name="do-first">
    <echo>Hello from ${dir-name} ${intented-target}</echo>
    <ant antfile="${dir-name}/build.xml" target="${intented-target}"/> 
</target>

Когда вы вызываете это из Ant, вы должны ввести это в командной строке:

ant do-all

и ваш вывод должен выглядеть следующим образом:

do-all:

do-first:

[echo] Hello from first init

do-first:

[echo] Hello from second build

do-first:

[echo] Hello from third compile

BUILD SUCCESSFUL Total time: 1 second

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

Вы также всегда можете передать переменную, которую хотите использовать, добавив значение в файл build.properties.

1 голос
/ 23 мая 2011

Если вы хотите сделать это в файле сборки ant, вы можете использовать Ant Contrib's для задачи , чтобы выполнить итерацию по списку подкаталогов и выполнить задачу ant для каждого из них.

<for param="subdir">
  <dirset dir="${build.dir}">
    <include name="./**"/>
  </dirset>
  <sequential>
    <subant target="${target}">
      <property name="subdir.name" value="@{subdir}"/>
    </subant>
  </sequential>
</for>

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

...