gradle - 如何诊断/解决gradle构建未运行依赖项任务的问题?

标签 gradle groovy build.gradle multi-project

我正在将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/

相关文章:

android - Android Gradle依赖项冲突和资源重复值

git - 将构建工件发布到 github 页面

android - 无法解析符号 Theme、ThemeOverlay

android - 在 android build.gradle 文件中添加任何新的依赖项。它总是显示错误

android - 实验性 gradle : The android plugin must be applied to the project 问题

Gradle父项目和子项目作为 sibling

java - 无法将 libGDX 项目导入 Eclipse。

Jenkins 转义 sed 命令

groovy - Gradle 依赖项 - 最新快照

grails - 是什么 ?关于常规变量?