从批处理文件运行Grails命令,直到成功

时间:2017-01-12 19:35:44

标签: windows batch-file grails

说明

  • Grails 项目具有多个插件依赖项(由于连接问题,其中许多项目无法立即解决,其他一些项目正在快速解决)
  • 我从项目根目录下的命令行运行 grails ,以便在我的项目中成功安装grails插件,但由于其中一些失败,我必须运行同样的命令(有时候再次)

问题:

如何为Windows (10) 制作批处理文件,以便一遍又一遍地执行 grails 命令,直到其结果为止是成功的

>>> 我试过这个:How to run command until it succeeds?,但我没有运气。它执行命令仅限第一次,然后即使有一些错误解决依赖关系也会停止,如下图所示。

enter image description here

非常感谢一些帮助。

2 个答案:

答案 0 :(得分:1)

评论太久了。修改How to run command until it succeeds?之后可能会完成这项工作:

:repeat
(grails command here |find /I "Error Resolve error obtaining dependencies") &&goto :repeat
echo Success!

阅读Redirection

  
      
  • commandA && commandB运行 commandA ,如果成功,则运行 commandB
  •   
  • commandA || commandB运行 commandA ,如果失败则运行 commandB
  •   

FIND will return an ErrorLevel as follows

  
      
  • 0在至少一个文件中找到字符串。
  •   
  • 1找不到字符串
  •   
  • 2如果列表中的任何文件不存在或没有文件与通配符掩码匹配。提供了无效的开关。
  •   

答案 1 :(得分:0)

找到了解决方法:

<强>逻辑:

  • 确保您的Grails项目结构上的目标文件夹没有用于此目的的战争。
  • 执行“grails war”命令,但不只是在批处理上执行 grails war ,而是调用grails war 。事实证明这是一个关键方面。由于当命令前面没有调用关键字时,grails会执行然后停止批处理,这意味着永远不会执行以下行(至少在grails命令失败时)
  • 检查war文件是否存在
  • 如果失败,请重试
  • 如果成功,那就完成了!

<强>代码:

@echo off

:loop
    echo Executing command...

    call grails war

    if exist "<full_path_to_war_file>" (
        echo Success!
    ) else (
        echo Failed!
        echo Retrying!
        goto loop
    )

echo Done!

重要提示:此变体使用grails的功能来创建战争。在创建战争之前,Grails尝试解决那些挂起的依赖项,因此如果失败,则永远不会发生战争,这样就可以检测到依赖项解析的失败。

我想说我从来没有做过.bat直到现在(所以,这可能会有很大改进),并且非常感谢那些发布在这里的人。