【问题标题】:Call another task from a task in gradle从 gradle 中的任务调用另一个任务
【发布时间】:2017-03-29 12:04:41
【问题描述】:

我正在使用 Gradle。我有两个任务:“a”和“b”。我希望任务“a”调用任务“b”。我该怎么做?

task b(type: Exec) {
    description "Task B"
    commandLine 'echo', 'task-b'
}

task a(type: Exec) {
    description "Task A"
    commandLine 'echo', 'task-a'
    // TODO: run task b
}

在 Ant 中这是小菜一碟:

<target name="a">
    <echo message="task-a"/>
    <antcall target="b"/>
</target>
<target name="b">
    <echo message="task-b"/>
</target>

我尝试的第一种方法是使用“dependsOn”功能。然而,这并不理想,因为我们需要反向考虑所有任务,并且还有其他几个问题(例如在满足条件时运行任务)。

我尝试的另一种方法是:

b.mustRunAfter(a)

但这只有在我像这样运行 gradle 任务时才有效:

gradle -q a b

这也不理想。

是否可以简单地从现有任务中调用另一个任务?

【问题讨论】:

标签: gradle build.gradle


【解决方案1】:

建议一种方法是为任务添加终结器

task beta << {
    println 'Hello from beta'
}

task alpha << {
    println "Hello from alpha"
}

// some condition
if (project.hasProperty("doBeta")) {
    alpha.finalizedBy beta
}

然后我们可以根据需要执行其他任务。至于从其他任务执行任务,您不能这样做。任务声明是声明性的而不是强制性的。所以一个任务可以依赖另一个任务,但不能执行另一个任务。

$ gradle -q alpha
Hello from alpha
$ gradle -q alpha -PdoBeta
Hello from alpha
Hello from beta

【讨论】:

    【解决方案2】:

    你可以使用

    a.dependsOn 'b'
    

    或者

    a.dependsOn b
    

    或者

    task a(type: Exec, dependsOn: 'b') { ... }
    

    adding dependencies to tasks

    【讨论】:

      【解决方案3】:

      总结和结合来自@JBirdVegas 和@lance-java 的答案,使用不推荐使用的doLast 而不是leftShift (&lt;&lt;):

      task beta {
          doLast {
              println 'Hello from beta'
          }
      }
      
      task alpha {
          doLast {
              println 'Hello from alpha'
          }
      }
      
      // some condition
      if (project.hasProperty('doBeta')) {
          alpha.finalizedBy beta // run 'beta' after 'alpha'
          // or
          // alpha.dependsOn beta // run 'beta' before 'alpha'
      }
      

      【讨论】:

        【解决方案4】:

        它工作正常,但提供警告,因为此版本中使用了已弃用的 Gradle 功能,使其与 Gradle 5.0 不兼容。

        我正在使用 gradle 4.7 版。因此,这意味着您在 build.gradle 中添加的某些功能将无法像在 gradle 5.0 中那样工作。

        使用命令行参数 --warning-mode=all 运行 Gradle 构建,以查看已弃用的功能到底是什么。

        它将通过指向 Gradle 文档的链接为您详细描述发现的问题,以获取如何修复您的构建的说明。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-07-09
          • 2018-05-14
          • 1970-01-01
          • 2013-12-05
          相关资源
          最近更新 更多