gpt4 book ai didi

gradle - mustRunAfter在Gradle多项目中无效

转载 作者:行者123 更新时间:2023-12-03 04:05:05 26 4
gpt4 key购买 nike

我有一个使用Gradle 2.0的多项目构建,在这里我想推迟所有发布任务在成功完成所有构建任务之后运行,以便所有项目都发布或不发布。我尝试使用mustRunAfter,但没有成功。因此,我将设置减少到最少:

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

task 'build'
task 'publish'(dependsOn: build)

这将执行为:
$ 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,则执行如下所示:
$ 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

当然,不利的一面是,如果不调用所有其他项目:build,我将无法执行任何子项目的:publish。这是多项目的mustRunAfter的bug,我做错了吗,还是有更好的替代方法来实现此目的?

最佳答案

问题似乎是:build任务实际上并未执行,因此mustRunAfter没有任何作用。我不得不单独声明所有项目之间的依赖关系,而不是一个根build根任务:

subprojects {
afterEvaluate {
publish.dependsOn assemble
publish.mustRunAfter parent.subprojects*.assemble
}
}

我使用 assemble而不是 build来避免运行所有测试,就像 publish一样。

关于gradle - mustRunAfter在Gradle多项目中无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26530007/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com