69

Gradle 是否可以在调用之前执行任务

gradle build

类似的东西precompile。有人请帮忙。这样的事情可能吗?如何?

4

7 回答 7

79

你可以这样做:

task build << {
    println 'build'
}
task preBuild << {
    println 'do it before build'
}
build.dependsOn preBuild

由于该任务preBuild将在build任务之前自动调用。

如果你想preBuild在配置阶段运行(前面的例子preBuildexecution阶段运行)你可以这样做:

task build << {
    println 'build'
}
build.doFirst {
    println 'do it before build'
}

更多关于 gradle 构建生命周期的信息可以在这里阅读http://www.gradle.org/docs/current/userguide/build_lifecycle.html

于 2013-08-30T12:01:04.190 回答
32

对于那些想知道如何在 Android 项目中执行此操作的人,这对我有用:

task myTask << {
  println "here's a task"
}
preBuild.dependsOn myTask
于 2015-05-18T20:43:40.583 回答
14

还有另一种方法可以做到这一点

task myTask << {
    println "here's a task"
}
tasks.whenTaskAdded { task ->
if (task.name == 'assembleDebug') {
    task.dependsOn myTask 
}
于 2017-01-20T12:47:37.740 回答
3

<<Gradle 5 中删除了左移运算符。

就我而言,我有一个使用 Java 子项目的 Android 项目,这很有效:

task myTask {
    doLast {
        println 'do it before build'
    }
}

assemble.dependsOn myTask

关于最初的问题,这应该是现在的语法:

task myTask {
    doLast {
        println 'do it before build'
    }
}
build.dependsOn myTask
// or for Android
preBuild.dependsOn myTask
于 2020-09-02T22:20:32.943 回答
2

在 Gradle 5.4.x 中

// File: app/build.gradle
// See: https://docs.gradle.org/current/dsl/org.gradle.api.tasks.Exec.html
task ruby(type:Exec) {
    workingDir '../'
    executable = '/usr/bin/env'
    args = ["ruby", "--version"]
}
preBuild.dependsOn ruby
于 2019-06-27T20:39:19.827 回答
1

如果要运行的任务已经定义(例如publishToMavenLocal),您可以将其添加到您的gradle build任务中:

build.dependsOn publishToMavenLocal
于 2019-05-08T12:43:38.497 回答
0

这是 Kotlin DSL (build.gradle.kts) 等效于k_o_的答案

tasks.create("MyTask") {
    doLast {
        println("I am the task MyTask")
    }
}

tasks.build {
    dependsOn("MyTask")
}

// OR another notation
// tasks.named("build") {
//     dependsOn(tasks["MyTask"])
// }

有关更多信息,请参阅Gradle 文档:向任务添加依赖项

于 2022-02-18T16:47:19.327 回答