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