2014-12-08 2 views
0

Я написал командный файл, который последовательно запускает несколько муравьев. Мне интересно, есть ли способ сохранить результаты каждой сборки (независимо от того, удалось ли это или не удалось) и отобразить ее в конце? Например:Сохранение результатов сборки ANT и отображение в конце пакетного запуска

Project1 - Success 
Project2 - Success 
Project3 - Failed 
Project4 - Success 

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

@echo off 
cd c:\<project1_dir>\build 
call C:\Home\apache-ant-1.9.4\bin\ant -buildfile build1.xml 
echo. 
cd c:\<project2_dir>\build 
call C:\Home\apache-ant-1.9.4\bin\ant -buildfile build2.xml 
echo. 
cd c:\<project3_dir>\build\ 
call C:\Home\apache-ant-1.9.4\bin\ant -buildfile build3.xml 
echo. 
cd c:\<project4_dir>\build 
call C:\Home\apache-ant-1.9.4\bin\ant -buildfile build4.xml 

Спасибо!

UPDATE:

На основании ответа David W, я придумал следующее:

@echo off 
cd c:\<project1_dir>\build 
call C:\Home\apache-ant-1.9.4\bin\ant -buildfile build1.xml 
set result1=%ErrorLevel% 
echo. 
cd c:\<project2_dir>\build 
call C:\Home\apache-ant-1.9.4\bin\ant -buildfile build2.xml 
set result2=%ErrorLevel% 
echo. 
cd c:\<project3_dir>\build\ 
call C:\Home\apache-ant-1.9.4\bin\ant -buildfile build3.xml 
set result3=%ErrorLevel% 
echo. 
cd c:\<project4_dir>\build 
call C:\Home\apache-ant-1.9.4\bin\ant -buildfile build4.xml 
set result4=%ErrorLevel% 

if "%result1%"=="0" (
    echo Project1: Succeeded 
) else (
    echo Project1: Failed 
) 
if "%result2%"=="0" (
    echo Project2: Succeeded 
) else (
    echo Project2: Failed 
) 
if "%result3%"=="0" (
    echo Project3: Succeeded 
) else (
    echo Project3: Failed 
) 
if "%result4%"=="0" (
    echo Project4: Succeeded 
) else (
    echo Project4: Failed 
) 

Приведенный выше код делает именно то, что я хотел, чтобы это сделать. Огромное спасибо!

ответ

1

Ant возвращает код выхода 0 о хороших строках и код выхода с ненулевым значением в плохих сборках. Это хранится в errorLevel и может быть проверено с if утверждения:

if errorlevel 1 (
    echo "Job Failed" 
) 
if %ErrorLevel% EQU 0 (
    echo "Job Succeeded 
) 

Или что-то в этом роде ... Я на самом деле не на моем синтаксисоме пакетного файла Windows. Я не знаю, как call влияет на настройку ErrorLevel. Возможно, вам придется установить переменную окружения в ErrorLevel в вызываемом скрипте, а затем работать оттуда.

Посмотрите на использование системы непрерывной сборки, например Jenkins, которая автоматизирует многие из этих проблем для вас. Jenkins может построить:

  • В определенное время.
  • При изменении исходного кода.
  • По требованию
  • Или комбинация из вышеперечисленного (строите в 5 вечера каждый день, но только если исходный код был изменен).

Это переместит строит независимый сервер (не более, Он не работает на моей машине вопросы), и Дженкинс будет держать выход сборки, показать, какие работы удалось или не удалось на своей приборной панели, и даже электронную почту (или твит или IM) определенные люди (включая виновника), когда сборка не выполняется. Если вы используете модульные тесты, Jenkins может запускать модульные тесты и показывать, сколько из этих тестов прошло успешно или не удалось.

Jenkins использует Java, но его довольно легко настроить - даже в системе Windows. Он может использовать Tomcat или JBoss в качестве механизма сервера приложений или собственный сервер приложений.

+0

Я использовал Jenkins для своих проектов Java, но это всего лишь инструмент, который я использую в Eclipse для создания всего рабочего пространства. Я делаю это так, чтобы каждый проект строился в определенном порядке, поскольку некоторые проекты опираются на других, которые необходимо создать в первую очередь. Является ли «errorlevel» встроенным, или это переменная, которую мне нужно создать/установить вручную? Я знаю, что есть способ имитировать массивы в пакетных файлах, поэтому я могу добавить результаты каждого вызова к этому, если я смогу получить результат после использования оператора «звонок» – DerStrom8

+0

Я определенно чрезмерно усложнил это. Теперь я работаю, основываясь на вашем ответе. Я опубликую обновление в моем исходном вопросе. Спасибо за вашу помощь! – DerStrom8

+0

Errorlevel - это как переменная среды, так и 'builtin' в Batch. Если вы скажете «если ErrorLevel 1», он проверяет код выхода 1 или выше. Если вы говорите '% ErrorLevel% EQ 2', это ровно 2. Вот почему вы не можете делать' if ErrorLevel 0'. По крайней мере, если я правильно помню свое пакетное программирование. –

Смежные вопросы