【发布时间】:2013-09-03 03:42:04
【问题描述】:
是否可以在调用之前gradle执行任务
gradle build
类似预编译的东西。有人请帮忙。这样的事情是否可行?如何实现?
【问题讨论】:
是否可以在调用之前gradle执行任务
gradle build
类似预编译的东西。有人请帮忙。这样的事情是否可行?如何实现?
【问题讨论】:
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
【讨论】:
could not get unknown property 'build' for root project 'core' of type org.gradle.api.Project
build.gradle吗?定义 `defaultTasks 'build' 有帮助吗?
build.gradle 不,在我的构建文件中添加 defaultTasks 'build' 没有帮助。
在 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
【讨论】:
如果要运行的任务已经定义(例如publishToMavenLocal),您可以将其添加到您的gradle build 任务中:
build.dependsOn publishToMavenLocal
【讨论】:
你可以这样做:
task build << {
println 'build'
}
task preBuild << {
println 'do it before build'
}
build.dependsOn preBuild
感谢该任务preBuild 将在build 任务之前自动调用。
如果您想在配置阶段运行preBuild(上一个示例在execution 阶段运行preBuild),您可以这样做:
task build << {
println 'build'
}
build.doFirst {
println 'do it before build'
}
关于 gradle 构建生命周期的更多信息可以在这里阅读http://www.gradle.org/docs/current/userguide/build_lifecycle.html。
【讨论】:
doFirst 将添加闭包作为构建任务的第一个任务操作。任务动作在执行阶段执行。
Could not get unknown property 'preBuild' for root project。你能给我看看完整的 gradle 文件吗?
gradlew assemble 任务之前调用它吗?如果可以,如何调用?
还有另一种方法可以做到这一点
task myTask << {
println "here's a task"
}
tasks.whenTaskAdded { task ->
if (task.name == 'assembleDebug') {
task.dependsOn myTask
}
【讨论】:
preBuild 任务执行此操作,但似乎没有执行。
whenTaskAdded。当我在这个闭包中打印 task.name 时,我没有看到它。
if (task.name == 'preDebugBuild' || task.name == 'preReleaseBuild') 为我工作,而不是 preBuild。
whenTaskAdded 机制似乎不适用于preBuild 任务。这个任务似乎没有调用这个闭包。我用上面的例子在preBuild上定义了依赖,但是用whenTaskAdded在其他任务上添加依赖,比如validateReleaseSigning。
对于那些想知道如何在 Android 项目中执行此操作的人,这对我有用:
task myTask << {
println "here's a task"
}
preBuild.dependsOn myTask
【讨论】:
assembleDebug之前调用这个吗?