Skip to content

mvn test命令在batch文件中的坑

问题背景

最近我在写一个 java 版的数据结构与算法项目,开源在 giteegithub

每次我编写完成代码后,都要执行以下操作:

shell
# 测试,没有问题才会执行下面的步骤
mvn test
# 推送到 gitee
git push origin master
# 推送到 github
git push github master

很繁琐,每次都要手动执行,我使用的是 windows 电脑,所以想用一个 batch 文件来完成这些操作, batch 文件如下:

bat
@echo off

REM 执行Maven测试
echo Running Maven tests...
mvn test

REM 检查测试是否成功
if %ERRORLEVEL% == 0 (
    echo Maven tests passed. Proceeding with git push...

    REM 推送至Gitee
    git push origin master

    REM 推送至GitHub
    git push github master

    echo Code has been successfully pushed to both repositories.
) else (
    echo Maven tests failed. Not pushing to repositories.
)

每次执行这个 batch 文件,都会在执行 mvn test 命令后退出,没有继续执行后面的步骤。

问题原因

在 batch 文件里面执行 Maven 的 mvn 命令后, mvn 之后的命令不会被执行,这是因为 mvn 本身也是 batch 文件,并且其结束时执行了 exit 命令,导致在这之后的所有命令都不会执行。

解决方法

在 mvn 之前加上 call 命令。 修正后的 batch 文件如下:

bat
@echo off

REM 执行Maven测试
echo Running Maven tests...
call mvn test

REM 检查测试是否成功
if %ERRORLEVEL% == 0 (
    echo Maven tests passed. Proceeding with git push...

    REM 推送至Gitee
    git push origin master

    REM 推送至GitHub
    git push github master

    echo Code has been successfully pushed to both repositories.
) else (
    echo Maven tests failed. Not pushing to repositories.
)

这样就可以正常执行了。