Подтвердить что ты не робот

Выполнить несколько проектов maven из файла bat bat?

Мне нужно построить 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 - это проект projectB, а projectC пропускаются. Любые идеи о том, как изменить вышеуказанный batfile, чтобы следующий проект был построен, если предыдущий был успешно сгенерирован?

4b9b3361

Ответ 1

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

call mvn clean install -U

См

help call

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

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

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

Ответ 2

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

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

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

Кажется, у вас есть следующая структура:

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

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

<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. Не наследование. Это означает, что не требуется, чтобы каждый модуль имел корневой проект как родительский.

Ответ 4

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

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

Ответ 5

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

 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

Ответ 6

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

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

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

Ответ 7

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

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