【问题标题】:|| operator in Gradle Task commandLine|| Gradle Task 命令行中的运算符
【发布时间】:2022-08-07 22:08:40
【问题描述】:

再会。有必要根据前一个命令的结果来决定运行第二个命令。

我需要检查是否安装了 npm 包,如果它不存在则开始安装。 npm list -g package(如果包不存在,此命令将返回一个不同于 0 的值)和 npm install -g package 命令用于该问题。使用|| 运算符很容易在终端中执行逻辑:

npm list -g package || npm install -g package

然后我创建了installPackage 任务gradle.build文件:

task installPackage(type: Exec) {
  commandLine \'npm\', \'list\', \'-g\', \'package\', \'||\', \'npm\', \'install\', \'-g\', \'package\'
}

而且这些命令都不起作用。事实上,结果显示就像使用了npm list -g 命令一样。

有没有办法在不使用第三方工具或插件的情况下做到这一点?可以使用哪些选项?非常感谢

    标签: gradle build.gradle gradlew


    【解决方案1】:

    有一个关于执行多个命令的问题Gradle -- execute multiple commands from task,但它不支持&&||。只需从以下对您有意义的解决方案中选择。我个人更喜欢解决方案1。

    1.把你的命令放在一个脚本里,然后调用这个脚本

    • 更灵活
    • 更具可读性(因为您不需要使用 ',' 来分隔命令)
    • 但需要参考另一个文件
    task installPackageWithScript(type: Exec) {
        commandLine('sh', './bin/installPackage.sh')
    }
    

    2. 参考Gradle - How to execute command line in doLast and get exit code?,获取第一个命令的退出码,判断是否需要第二个命令。

    • 无需参考其他文件
    • 但可读性和可维护性较差
    task installPackageInline(type: Exec) {
        commandLine('npm', 'list', '-g', 'package')
        doLast {
            if (execResult.exitValue == 0) {
                println "list Success"
            } else {
                println "list Fail, run install"
                exec { commandLine('npm', 'install', '-g', 'package') }
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-02-10
      • 2019-12-09
      • 1970-01-01
      • 2015-09-02
      • 2019-03-06
      • 1970-01-01
      • 2019-05-28
      • 1970-01-01
      相关资源
      最近更新 更多