从MS bat文件执行多个maven项目?

时间:2011-05-25 20:12:40

标签: maven batch-file

我需要使用build.bat文件构建3个独立的maven项目(因为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被跳过。关于如何修改上面的bat文件的任何想法,以便在前一个项目成功构建时构建以下项目?

7 个答案:

答案 0 :(得分:48)

使用call命令执行mvn进程,例如:

call mvn clean install -U

请参阅online doc for call

help call

有关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

答案 1 :(得分:7)

如上所述,您需要使用“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

答案 2 :(得分:3)

为什么不尝试创建聚合父项目?

您似乎具有以下结构:

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

只需在根目录(我的示例中为pom.xml)中创建someDirectory,然后定义模块列表,即projectAprojectB和{{ 1}}。这个pom看起来像:

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> ,因为它不是“真正的”Java项目。
  • <packaging>pom</packaging>的名称应与托管子模块的目录名称相匹配。

现在,通过这样做,当您在根目录上运行Maven命令时,Maven将自动在所有模块上运行此命令。因此,如果您只在根目录上运行module,它将在您的三个模块中运行此命令。

重要说明:我在这里谈论Maven的aggregation featureNot inheritance。这意味着不需要每个模块都将根项目作为父项。

答案 3 :(得分:1)

如果要在父文件中调用另一个批处理文件,请使用“call”,以便该控件将返回到父批处理文件,并且将继续执行。

例如调用mvn clean install

答案 4 :(得分:1)

我认为使用%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

答案 5 :(得分:0)

由于您的项目位于同一目录级别,因此不应向上导航两次。您通过cd ..上升,然后通过cd ../projectX再次上升到一个级别进入下一个项目。

删除中间的cd ..或将cd更改为项目文件夹到cd ./projectX(当前目录而不是父目录)

顺便说一句,你真的需要使用bat文件吗?你考虑过多模块pom吗?

答案 6 :(得分:0)

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 build作为一种子程序,它结束回你的bat文件并且不会完全退出。