如何诊断/排除 gradle build not 运行 依赖任务?
How to diagnose / troubleshoot gradle build not running dependency task?
我正在将 gradle
添加到多项目构建中并达到学习曲线。
我需要在编译子项目之前调用 type:Exec
的自定义任务。该任务未被调用。为什么?
build.gradle 父项目
task precompiletask(type:Exec) {
println "Executing pre-compile task"
// ...
}
task(":cppproj:build").dependsOn precompiletask
// Also tried this, same output
//project(":cppproj").task(":build").dependsOn precompiletask
// Also tried this -> error "Cannot add task 'build' as a task with that name already exists"; why on Earth would this syntax *add* the task "build"?
//project(":cppproj").task("build").dependsOn precompiletask // I also tried this
子项目 'cppproj'
的 我正在将 gradle
添加到多项目构建中并达到学习曲线。
我需要在编译子项目之前调用 type:Exec
的自定义任务。该任务未被调用。为什么?
build.gradle 父项目
task precompiletask(type:Exec) {
println "Executing pre-compile task"
// ...
}
task(":cppproj:build").dependsOn precompiletask
// Also tried this, same output
//project(":cppproj").task(":build").dependsOn precompiletask
// Also tried this -> error "Cannot add task 'build' as a task with that name already exists"; why on Earth would this syntax *add* the task "build"?
//project(":cppproj").task("build").dependsOn precompiletask // I also tried this
子项目 'cppproj'build.gradle
apply plugin: "cpp"
model {
components {
api(NativeLibrarySpec) {
sources {
// ...
}
}
}
}
-
相关问题
apply plugin: "cpp"
model {
components {
api(NativeLibrarySpec) {
sources {
// ...
}
}
}
}
为什么我觉得很难调试它?我是 运行 gradle
,输出最详细 (gradle build --debug --warning-mode all
)。我的自定义任务 precompiletask
中唯一提到的是这些,集中在输出的开头:
07:24:41.151 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Build operation 'Realize task :precompiletask' started
07:24:41.243 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Completing Build operation 'Realize task :precompiletask'
07:24:41.243 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Build operation 'Realize task :precompiletask' completed
07:24:41.249 [QUIET] [system.out] Executing pre-compile task
为什么没有与使用 dependsOn
link 两个任务失败相关的错误?由于 dependsOn
在我的代码中被明确调用,我预计会出现一个错误,即找不到子项目或任务,或者 dependsOn 本身以某种方式失败。这是否与 gradle
能够引用尚不存在的内容的灵活性有关?
这对 'Realize task' 意味着什么?无法找到此记录。谢谢。
您没有使用正确的方法访问根项目构建中的 :cppproj:build 任务:您正在使用 project.task() 方法,这实际上是在创建一个新任务。
您有多种方法可用于 'locate' 您要配置的任务(添加 dependsOn 约束),如此处所述:locating tasks
在你的情况下你可以这样写:
tasks.getByPath(':cppproj:build').dependsOn precompiletask
注一:
使用语法 task(":cppproj:build").dependsOn precompiletask
时:您在根项目上创建一个名为“:cppproj:build”的新任务并使其依赖于预编译任务:这就是 precompiletask[=35= 的原因] 如果您从父项目或子项目执行 build 任务,则不会执行。
注2:
// Also tried this -> error "Cannot add task 'build' as a task with that name already exists"; why on Earth would this syntax add the task "build"? //project(":cppproj").task("build").dependsOn precompiletask
=> 因为 project.task(String)
方法创建了一个任务,所以你试图将名为 build 的新任务添加到已经有一个 构建任务。
只是为我的 sequel 问题添加一个答案:为什么这个看似等效的语法无法实现相同的目的:project("cppproj").tasks["build"].dependsOn
.
我发现 gradle 构建的 "configuration" 步骤默认是以自上而下的方式完成的,这意味着当根项目 build.gradle 被执行时,子项目不会尚未包含他们的任务。这可以通过以下方式更改:
evaluationDependsOnChildren()
...然后可以写:
subprojects.each {
it.tasks["build"].dependsOn myPreCompileTask
}