2012-02-03 3 views
0

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

Вот вопросы:

  1. Некоторые из этих проектов находятся в более глубоких каталогов, чем другие.
  2. Только некоторые из проектов должны быть построены за один раз.

Я пытался использовать subant + antfile и определение CSV путей файлов в свойствах файла, но это не сработало. Ниже есть то, что у меня есть, и ошибка, которую я получаю.

Если есть лучший способ сделать это или вы знаете, в чем моя проблема, сообщите мне об этом! Благодаря!

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

projects.to.build= 

Это subant задача я пытаюсь использовать в главном скрипте сборки.

<filelist 
     id="projectNames" 
     dir="${basedir}" 
     files="${projects.to.build}" 
    /> 

    <target name="debugAll" description="Builds all the projects listed in the projectNames.properties file."> 
     <subant target="debug" antfile="${projects.to.build}"> 
     </subant> 
    </target> 

Здесь ошибка я получаю, когда я пытаюсь запустить сценарий сборки, когда есть проекты, определенные в файле свойств. Я использую относительный путь. Например: .. \ Apps \ AnApp1 \ build.xml, .. \ Apps \ AnApp2 \ build.xml, .. \ OtherApps \ Foo \ AnotherApp1 \ build.xml

"No Build Path Specified" (at my subant task) 

ответ

9

Вы указали antfile атрибут, поэтому ANT ожидал один файл build.xml.


subant documentation описывает, как вы можете использовать набор файлов в качестве параметра ребенка.

Вот пример:

<project name="Subant demo" default="run-debug-target"> 
    <target name="run-debug-target"> 
     <subant target="debug"> 
      <fileset dir="." includes="**/build.xml" excludes="build.xml"/> 
     </subant> 
    </target> 
</project> 

Update

В качестве альтернативы filelist могут быть использованы:

<project name="Dry run" default="run"> 
    <target name="run"> 
     <subant target="test"> 
      <filelist dir="projects" files="one/build.xml,two/build.xml,three/build.xml,four/build.xml"/> 
     </subant> 
    </target> 
</project> 

Обработка следующие файлы сборки:

  • проекты/один/build.xml
  • проекты/два/build.xml
  • проекты/три/build.xml
  • проекты/четыре/сборки.xml
+0

Да, но я хочу, чтобы указать, какие проекты строить, прочитав в свойстве, заданном в файле свойств. Я хотел бы, чтобы это свойство представляло собой CSV относительных путей к файлу сборки проектов. И единственный способ, которым я нашел, что я мог бы это сделать, - использовать файл-файл, и единственный пример, который я нашел с файлом, был с antfile. Есть ли способ достичь моей цели с помощью 'fileset'? – prolink007

+0

@ prolink007 Я обновил сообщение с файловым списком, как и требовалось. Вы можете легко использовать свойство для хранения списка файлов в формате CSV. –

+0

Работало отлично. Спасибо за помощь! Я пытался усложнить ситуацию. знак равно – prolink007

0

Возможно ли запустить цель во всех файлах сборки одновременно?

E.g.

<project name="Dry run" default="run"> 
    <target name="run"> 
     <subant target="test"> 
      <filelist dir="projects" files="one/build.xml,two/build.xml,three/build.xml,four/build.xml"/> 
     </subant> 
    </target> 
</project> 

В этом примере, есть ли способ запустить цель «тест» присутствует во всех файлах сборки (один/build.xml, два/build.xml, три/build.xml, четыре/сборки. xml) одновременно?