Gradle:通过子项目的递归执行调用root-task

时间:2013-03-28 15:09:52

标签: eclipse gradle multi-project

如果我有像这样的gradle多项目

RootProject
+-- SubProjectA
+-- SubProjectB

每个项目都有一个'foo'任务,我可以在根项目上调用它

RootProject>gradle foo

并且它也会被子项目执行

:foo
:SubProjectA:foo
:SubProjectB:foo

但如果我从子项目中调用任务':foo'

RootProject\SubProjectA>gradle :foo

只有root项目上的任务才会被执行

:foo

但不是子项目上的'foo'任务。

有没有办法在子项目中对所有项目调用'foo'?我问这个是因为我正在使用gradle eclipse插件,在那里我只能访问子项目,即我在eclipse中看到的项目。

顺便说一下:到目前为止我想出的(有点hacky)解决方案

task fooAll(type:Exec) {
    workingDir '..'
    commandLine 'cmd', '/c', 'gradle foo'
}

1 个答案:

答案 0 :(得分:1)

将任务名称(例如foo)解析为任务是启动目录的一个功能,默认为当前目录。您可以使用-p命令行选项更改起始目录(请参阅gradle --help)。因此,您必须执行gradle foo -p ../之类的操作。

同样导入根项目可能是解决Eclipse问题的更好方法。 Eclipse工具可以很好地处理分层目录布局。

PS::foo是一个任务路径。它引用根项目(foo)中名为:的任务。