Gradle Native Binaries插件创建任务时

时间:2015-10-10 12:42:40

标签: gradle multi-project gradle-plugin

我正在进行多项目gradle配置。

在根项目中,有一个插件扫描所有子项目以查找" NativeComponents"然后创建一个通用任务,其中包含所有本机组件的构建任务的依赖项。

问题是我设置通用任务的依赖关系(到组件的构建任务)。如果我在创建通用任务时尝试设置依赖项(在根项目评估期间),它会向我显示错误:

Task with path ':CppProj:cppComponentExecutable' not found in root project 'RootProject'.

如果我尝试在执行阶段(在通用任务执行中)设置依赖关系,那么不起作用,因为Gradle不允许在任务执行后设置依赖关系。它告诉我错误:

Cannot call Task.dependsOn(Object...) on task ':distributeTest_CppForArduinoYun_OpenWrt' after task has started execution.

尝试更改项目评估顺序:

subprojects.each { subproject -> evaluationDependsOn ( subproject.path ) }

但没有任何成功。

当我打印每个子项目的任务编号时,它会向我显示NativeBinaries项目仍然没有任务,直到第一次执行任务为止。

修改

@Opal如何建议,我尝试使用project.afterEvaluate语句,但它没有用。当我打印每个项目的任务编号时,在他的评估之后'事件; NativeBinaries项目仍然没有任务。

Here你可以找到一个简单的多项目来测试这个问题。 Ther 2项目:Root和ProjA。根项目应用分发插件,将printTasks()函数注册到根项目中的以下事件:

  • project.beforeEvaluate未提出
  • project.afterEvaluate
  • project.getGradle().projectsEvaluated
  • project.getGradle().projectsLoaded未提出
  • project.getGradle().taskGraph.whenReady
  • project.allprojects.each { p-> p.afterEvaluate }
  • project.getGradle().addBuildListener
    • buildStarted未提出
    • settingsEvaluated未提出
    • projectsLoaded未提出
    • buildFinished
    • projectsEvaluated

事件project.afterEvaluateproject(gradle).afterEvaluateproject(ProjA).afterEvaluateBuildListener::projectsEvaluatedproject.getGradle().projectsEvaluated打印:

Project | Tasks count
--------|------------
gradle  | 1
ProjA   | 0

仅打印事件project.getGradle().taskGraph.whenReadyBuildListener::

Project | Tasks count
--------|------------
gradle  | 1
ProjA   | 8

不幸的是,这两个事件太迟了,我无法为任务添加依赖项。

知道如何解决它?

1 个答案:

答案 0 :(得分:1)

要注册以查找定义的所有项目任务的事件是rootProject.gradle.taskGraph.whenReady。如果我们在引发此事件时打印任何项目的任务,那么我们可以找到构建本机二进制文件所需的所有任务。

关于二进制文件生成的所有其他信息都在{native_proj}.binaries中。