多模块任务依赖

Multi-Module Task Dependencies

我希望一个任务的输出可用于另一个子模块中的相同任务。

我正在尝试制作另一个用于编译(C/++、.hs.coffee.js 等)和源代码生成的插件。 因此,我正在制作一个插件和 task/s,它(到目前为止)为每个模块生成 CMakeLists.txtAndroid.mk.vcxproj 或其他任何内容以构建源代码。

为此我有一个多模块构建。 我可以四处寻找 "other" 个子模块中的任务,但是,我似乎无法强制执行任何执行顺序。

所以,与...

...我发现 NativeGUI 任务在 SharedModule 之前执行,这意味着 SharedModule 结果尚未准备好。

不好。

因为 dependency { ... } 事情发生在插件安装后(AFAIK)...我猜依赖关系是在安装之后连接的。

我需要根据依赖关系按顺序执行我的任务...对吗?我该怎么做?

我创建了一个 (scala) TaskBag,它懒惰地注册了所有参与的 Task 实例的集合。 我向其中添加了我的任务实例,以及新任务出现时的处理程序。

在配置期间,任何任务都可以在 lambda 中包含逻辑以过滤和作用于其他任务,并且一旦两个任务都参与,它就会被执行。

package peterlavalle

import java.util

import org.gradle.api.Task

object TaskBag {

    class AnchorExtension extends util.LinkedList[(Task, Task => Unit)]()

    /**
        * connect to the group of tasks
        */
    def apply(task: Task)(react: Task => Unit): Unit =
        synchronized {
            // lazily create the central anchor ... thing ...
            val anchor: AnchorExtension =
                task.getProject.getRootProject.getExtensions.findByType(classOf[AnchorExtension]) match {
                    case null =>
                        task.getProject.getRootProject.getExtensions.create(classOf[AnchorExtension].getName, classOf[AnchorExtension])
                    case anchor: AnchorExtension =>
                        anchor
                    }

            // show us off to the old ones
            anchor.foreach {
                case (otherTask, otherReact) =>
                    require(otherTask != task, "Don't double register a task!")
                    otherReact(task)
                    react(otherTask)
            }

            // add us to the list
            anchor.add(task -> react)
        }

}