mustRunAfter在Gradle多项目中不起作用

mustRunAfter在Gradle多项目中不起作用,gradle,Gradle,我有一个Gradle 2.0版本的多项目构建,我希望在所有构建任务成功完成后推迟所有发布任务的运行,以便发布所有项目或不发布任何项目。我试图使用mustRunAfter,但没有成功。因此,我将设置减少到最小: 让我们假设一个gradle多项目构建,包含两个子项目“foo”和“bar”,每个子项目都有一个build.gradle,如下所示: task 'build' task 'publish'(dependsOn: build) $ gradlew publish :bar:build UP-

我有一个Gradle 2.0版本的多项目构建,我希望在所有构建任务成功完成后推迟所有发布任务的运行,以便发布所有项目或不发布任何项目。我试图使用
mustRunAfter
,但没有成功。因此,我将设置减少到最小:

让我们假设一个gradle多项目构建,包含两个子项目“foo”和“bar”,每个子项目都有一个
build.gradle
,如下所示:

task 'build'
task 'publish'(dependsOn: build)
$ gradlew publish
:bar:build UP-TO-DATE
:foo:build UP-TO-DATE
:build UP-TO-DATE
:bar:publish UP-TO-DATE
:foo:publish UP-TO-DATE
这将执行为:

$ gradlew publish
:bar:build UP-TO-DATE
:bar:publish UP-TO-DATE
:foo:build UP-TO-DATE
:foo:publish UP-TO-DATE
然后我向根项目添加了以下
build.gradle

def allBuilds = task build

subprojects {
    afterEvaluate {
        allBuilds.dependsOn build
        publish.mustRunAfter allBuilds
    }
}
但这不会改变执行顺序

但是,如果我将
mustRunAfter
更改为
dependsOn
,则执行如下:

task 'build'
task 'publish'(dependsOn: build)
$ gradlew publish
:bar:build UP-TO-DATE
:foo:build UP-TO-DATE
:build UP-TO-DATE
:bar:publish UP-TO-DATE
:foo:publish UP-TO-DATE

当然,缺点是,在没有调用所有其他项目的情况下,我无法执行任何子项目的:publish:build。这是多项目mustRunAfter的一个bug,我做得不对还是有更好的替代方法来实现这一点?

问题似乎是,
:build
任务没有实际执行,因此
mustRunAfter
没有效果。我必须单独声明所有项目之间的依赖关系,而不是一个根
build
任务:

subprojects {
    afterEvaluate {
        publish.dependsOn assemble
        publish.mustRunAfter parent.subprojects*.assemble
    }
}
我使用了
assembly
而不是
build
来避免运行所有测试,就像
publish
那样