Gradle 多模块任务依赖关系
我希望一个任务的输出可以用于另一个子模块中的相同任务 我正在尝试制作另一个用于编译(C/++、Gradle 多模块任务依赖关系,gradle,gradle-plugin,Gradle,Gradle Plugin,我希望一个任务的输出可以用于另一个子模块中的相同任务 我正在尝试制作另一个用于编译(C/++、.hs、.coffee、.js等)和源代码生成的插件。 因此,我正在制作一个插件和任务,它(到目前为止)为每个模块生成CMakeLists.txt、Android.mk、.vcxproj或其他任何构建源代码的模块 我有一个多模块构建。 我可以从“其他”子模块中找到任务,但是,我似乎无法强制执行任何执行顺序 所以,用 根项目:RootModule 子项目:NativeCommandLine(需要共享模
.hs
、.coffee
、.js
等)和源代码生成的插件。
因此,我正在制作一个插件和任务,它(到目前为止)为每个模块生成CMakeLists.txt
、Android.mk
、.vcxproj
或其他任何构建源代码的模块
我有一个多模块构建。
我可以从“其他”子模块中找到任务,但是,我似乎无法强制执行任何执行顺序
所以,用
- 根项目:RootModule
- 子项目:NativeCommandLine(需要共享模块)
- 子项目:NativeGUI(需要SharedModule)
- 子项目:SharedModule
NativeGUI
任务在SharedModule
之前执行,这意味着SharedModule
结果尚未就绪
糟糕
由于依赖项{…}
的东西发生在插件安装之后(AFAIK)。。。我猜这些依赖项是在之后连接的
我需要根据依赖关系按顺序执行任务。。。正确的?我如何才能做到这一点?我创建了一个(scala)任务包
,它惰性地注册所有参与的任务
实例的集合。
我将我的任务的实例添加到其中,并在新任务出现时添加一个处理程序
在配置过程中,任何任务都可以在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)
}
}