Выполнить несколько проектов Maven из файла MS Bat? - PullRequest
25 голосов
/ 26 мая 2011

Мне нужно собрать 3 независимых проекта maven, используя файл build.bat (из-за того, что агрегация tycho не возможна - см. Комментарии к ответу romaintaz).Я пытался (выполняется из папки сборки - см. Ниже):

cd ../projectA
mvn clean install -U
cd ..
cd ../projectB
mvn clean install -U
cd ..
cd ../projectC
mvn clean install -U

, где структура папок проектов:

build
  |--> build.bat

projectA
  |--> pom.xml

projectB
  |--> pom.xml

projectC
  |--> pom.xml

, но только projectA - это build buildB, а projectC -пропускаются.Любые идеи о том, как изменить вышеупомянутый batfile, чтобы следующий проект был собран, если предыдущий был успешно собран?

Ответы [ 7 ]

48 голосов
/ 26 мая 2011

Используйте команду call для выполнения процессов mvn, например:

call mvn clean install -U

См. онлайн-документ для вызова или

help call

для дальнейших объяснений.по команде вызова.

Чтобы избежать использования всех этих команд cd, вы также можете использовать опцию -f, чтобы указать путь к вашей поме, например

call mvn -f <path>/projectA/pom.xml clean install -U
call mvn -f <path>/projectB/pom.xml clean install -U
call mvn -f <path>/projectC/pom.xml clean install -U
7 голосов
/ 15 марта 2012

Как отмечалось выше, вам нужно использовать "call" для запуска скрипта mvn, как в:

call mvn package

Чтобы перехватить ошибки, вам нужно использовать переменную ERROR_LEVEL, как в:

call mvn clean
echo Exit Code = %ERRORLEVEL%
if not "%ERRORLEVEL%" == "0" exit /b

См. http://jojovedder.blogspot.com/2009/03/executing-multiple-mvn-commands-from.html для дальнейших комментариев.

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

Почему бы вам не попробовать создать агрегатный родительский проект?

Похоже, у вас следующая структура:

someDirectory
  +- projectA
      +- pom.xml
  +- projectB
      +- pom.xml
  +- projectC
      +- pom.xml

Просто создайте pom.xml в корневом каталоге (someDirectory в моем примере) и определите список модулей, которые являются projectA, projectB и projectC. Этот пом будет выглядеть так:

<project>
    <modelVersion>4.0.0</modelVersion>
    <groupId>my.company</groupId>
    <artifactId>my-aggregation-project</artifactId>
    <version>1.0</version>
    <packaging>pom</packaging>

    <modules>
        <module>projectA</module>
        <module>projectB</module>
        <module>projectC</module>
    </modules>
</project>

Примечания:

  • Не забудьте установить <packaging>pom</packaging>, так как это не «настоящий» Java-проект.
  • Имя module должно совпадать с именем каталога, в котором размещен субмодуль.

Теперь, выполнив это, при запуске команды Maven в корневом каталоге Maven автоматически запустит эту команду на всех модулях. Так что, если вы просто запустите mvn clean install в корневом каталоге, он запустит эту команду в ваших трех модулях.

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

1 голос
/ 07 августа 2013

Я думаю, что использование% ERRORLEVEL% завершит + ответ FrVaBe. Родом из Кунал

 call mvn -f ProjectA\pom.xml clean install  if not "%ERRORLEVEL%" == "0" goto error

 call mvn -DskipTests=true -f ProjectC\pom.xml clean install if not "%ERRORLEVEL%" == "0" goto error

 exit

 :error @echo Build Failed pause
1 голос
/ 27 июня 2013

Используйте 'call', когда вы хотите вызвать другой пакетный файл в родительском файле, чтобы управление возвращалось родительскому пакетному файлу и продолжалось выполнение.

например, вызов mvn clean install

0 голосов
/ 26 августа 2016

FrVaBe ответил очень хорошо. Если вы хотите сохранить структуру кода, из-за некоторых других действий, таких как копирование артефактов, решение будет следующим:

cd ../projectA
call mvn clean install -U
echo Do some stuff with artifacts
cd ..
cd ../projectB
call mvn clean install -U
echo Do some stuff with artifacts
cd ..
cd ../projectC
call mvn clean install -U
echo Do some stuff with artifacts

Здесь наиболее важной является функция вызова , которая используется для выполнения сборки maven как своего рода подпрограмма, которая заканчивается в вашем файле bat и не завершается полностью.

0 голосов
/ 26 мая 2011

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

Либо удалите промежуточные cd .., либо измените компакт-диск в папку вашего проекта на cd ./projectX (текущий каталог вместо родительского)

Кстати, вам действительно нужно использовать bat-файл для этого? Вы рассматривали многомодульный пом?

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