如何诊断/排除gradle生成未运行依赖项任务的故障?

如何诊断/排除gradle生成未运行依赖项任务的故障?,gradle,groovy,build.gradle,multi-project,Gradle,Groovy,Build.gradle,Multi Project,我正在将gradle添加到多项目构建中,并开始学习 在编译子项目之前,我需要调用类型为:Exec的自定义任务。未调用该任务。为什么? 父项目的build.gradle 子项目“cppproj”的build.gradle - 相关问题 为什么我发现调试它如此困难?我正在运行带有详细est输出的gradle(gradlebuild--debug--warning mode all)。我的自定义任务预编译任务中只提到以下内容,它们集中在输出的开头: 07:24:41.151 [DEBUG] [org

我正在将
gradle
添加到多项目构建中,并开始学习

在编译子项目之前,我需要调用
类型为:Exec
的自定义任务。未调用该任务。为什么?

父项目的build.gradle 子项目“cppproj”的build.gradle -
相关问题 为什么我发现调试它如此困难?我正在运行带有详细est输出的
gradle
gradlebuild--debug--warning mode all
)。我的自定义任务
预编译任务
中只提到以下内容,它们集中在输出的开头:

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任务build:您使用的是方法,实际上是在创建新任务

有几种方法可用于“定位”要配置的任务(添加dependsOn约束),如下所述:

在你的情况下,你可以写:

tasks.getByPath(':cppproj:build').dependsOn precompiletask
注1:

使用语法
task(“:cppproj:build”).dependsOn预编译任务
:在根项目上创建一个名为“:cppproj:build”的新任务,并使其依赖于预编译任务:这就是如果从父项目或子项目执行生成任务,则不会执行预编译任务的原因

注2:

//还尝试了此->错误“无法添加任务‘生成’,因为具有该名称的任务已存在”;这个语法究竟为什么要添加任务“build”? //项目(“:cppproj”).task(“构建”).dependsOn预编译任务


=>因为
project.task(String)
方法创建了一个任务,所以您正在尝试将名为build的新任务添加到已经有一个生成任务的子项目中。

您没有使用正确的方法访问根项目中的:cppproj:build任务build:您正在使用方法,这实际上是在创建一个新任务

有几种方法可用于“定位”要配置的任务(添加dependsOn约束),如下所述:

在你的情况下,你可以写:

tasks.getByPath(':cppproj:build').dependsOn precompiletask
注1:

使用语法
task(“:cppproj:build”).dependsOn预编译任务
:在根项目上创建一个名为“:cppproj:build”的新任务,并使其依赖于预编译任务:这就是如果从父项目或子项目执行生成任务,则不会执行预编译任务的原因

注2:

//还尝试了此->错误“无法添加任务‘生成’,因为具有该名称的任务已存在”;这个语法究竟为什么要添加任务“build”? //项目(“:cppproj”).task(“构建”).dependsOn预编译任务


=>因为
project.task(String)
方法创建了一个任务,所以您尝试将名为build的新任务添加到已经有一个构建任务的子项目中。

只是添加了我的后续问题的答案:为什么这个看似等价的语法无法实现相同的功能:
project(“cppproj”).tasks[“build”].dependsOn

我发现gradle build的“配置”步骤默认是以自顶向下的方式完成的,这意味着在执行根项目build.gradle时,子项目还不包含它们的任务。可以通过执行以下操作来更改此设置:

evaluationDependsOnChildren()
。。。然后你可以写:

subprojects.each {
    it.tasks["build"].dependsOn myPreCompileTask
}

只是为我的续集问题添加了一个答案:为什么这个看似等价的语法无法实现同样的功能:
project(“cppproj”).tasks[“build”].dependsOn

我发现gradle build的“配置”步骤默认是以自顶向下的方式完成的,这意味着在执行根项目build.gradle时,子项目还不包含它们的任务。可以通过执行以下操作来更改此设置:

evaluationDependsOnChildren()
。。。然后你可以写:

subprojects.each {
    it.tasks["build"].dependsOn myPreCompileTask
}

您能否提供用于执行构建的gradle命令(您确切地调用了哪些任务)和输出结果(它应该列出所有已执行的任务);您使用的是哪个版本的gradle?@M.Ricciuti谢谢。它是
gradlebuild--debug--warning模式all
。我的根项目有一个C++子项目(<代码>应用插件:“CPP”< /C>)和一个java子项目(<代码>应用插件:“java库”<代码> >)。我正在尝试在编译两个子项目之前添加一个代码生成步骤(
precompiletask
)。您能否提供用于执行构建的gradle命令(您确切调用了哪些任务)和输出结果(它应该列出所有执行的任务);您使用的是哪个版本的gradle?@M.Ricciuti谢谢。它是
gradlebuild--debug--warning模式all
。我的根项目有一个C++子项目(<代码>应用插件:“CPP”< /C>)和一个java子项目(<代码>应用插件:“java库”<代码> >)。我试图在编译两个子项目之前添加一个代码生成步骤(
precompiletask
),因此方法
project.task(String)
添加了一个任务,好的-感谢您的澄清。你的建议让我走上了正确的轨道——我现在执行了
预编译任务。顺便说一句,你能告诉我为什么这个替代语法失败吗<代码>//项目(“cppproj”)。任务[“构建”]。依赖于预编译任务
(在项目中找不到名为“构建”的任务时失败:cppproj)。任务显然就在那里,因为它只通过切换到您的
getByPath()
方法工作。因此方法
project.task(String)
添加了一个任务,好的-感谢您的澄清。你的建议让我走上了正确的轨道——我现在执行了
预编译任务。作为