我正在将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 {
// ...
}
}
}
}
--
相关问题
为什么我很难调试它?我正在使用最详细的输出(
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
链接两个任务相关的错误?由于在我的代码中明确调用了dependsOn
,所以我期望会出现一个错误,即找不到子项目或任务,或者dependsOn本身以某种方式失败。这是否与gradle
能够引用尚不存在的东西的灵活性有关?无论如何,“实现任务”是什么意思?找不到此文档。谢谢。
最佳答案
您没有在根项目构建中使用正确的方式访问:cppproj:build任务:您正在使用project.task()方法,实际上是在创建一个新任务。
您可以通过多种方式来“定位”要配置的任务(添加dependsOn约束),如此处所述:locating tasks
您可以写:
tasks.getByPath(':cppproj:build').dependsOn precompiletask
注1:
当使用语法
task(":cppproj:build").dependsOn precompiletask
时:您在根项目上创建一个名为“:cppproj:build”的新任务,并使其依赖于precompiletask:这就是为什么如果您从父项目或子项目中执行构建任务,则不执行precompiletask的原因。笔记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的新任务添加到已经具有一个构建任务的子项目中。
关于gradle - 如何诊断/解决gradle构建未运行依赖项任务的问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52327255/