我需要使用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文件的任何想法,以便在前一个项目成功构建时构建以下项目?
答案 0 :(得分:48)
使用call
命令执行mvn进程,例如:
call mvn clean install -U
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
,然后定义模块列表,即projectA
,projectB
和{{ 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 feature。 Not 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文件并且不会完全退出。