我希望一个任务的输出可用于另一个子模块中的相同任务。
我正在尝试制作另一个用于编译的插件(C / ++,.hs
,.coffee
,.js
等)和源代码生成。
所以,我正在创建一个插件和任务(到目前为止)为每个模块生成CMakeLists.txt
,Android.mk
,.vcxproj
或其他任何内容来构建源代码。
我有一个多模块构建。 我可以到处找到来自"其他"的任务。子模块,但是,我似乎无法执行任何执行命令。
所以,有......
...我发现NativeGUI
任务在SharedModule
之前执行,这意味着SharedModule
结果尚未准备就绪。
坏。
由于dependency { ... }
内容在安装插件后发生(AFAIK)......我猜测依赖关系是在之后连接的。
我需要根据依赖关系按顺序执行我的任务......对吗?我怎么能这样做?
答案 0 :(得分:0)
我创建了一个(标量)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)
}
}