Я добавляю 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
build.gradle подпроекта 'cppproj'
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
явно вызывается в моем коде, я ожидаю ошибку, что либо подпроект, либо задачи не найдены, либо зависит от самого себя, как-то не получится. Связано ли это с гибкостью gradle
возможности ссылаться на вещи, которые еще не существуют?
Что значит «Реализовать задачу»? Не удалось найти это документально. Спасибо.