Gradle 任务依赖顺序

Gradle task dependency order

我的自定义 gradle 任务有问题:我想复制我的 android jar 库并在执行 'clean build' 后重命名它 这是我的定义:

task('CreateJar', type: Copy, dependsOn: [':mylibmodule:clean', ':mylibmodule:build']){
  doLast {
    from('build/intermediates/bundles/release/')
    into('libs')
    include('classes.jar')
    rename('classes.jar', 'MyLib.jar')
  }
}

问题是在 gradle 日志结果中,'clean' 在 'build' 任务之后完成,因此永远不会将库复制到目标文件夹:

...
:mylibmodule:testReleaseUnitTest
:mylibmodule:test
:mylibmodule:check
:mylibmodule:build
:mylibmodule:clean
:mylibmodule:CreateJar NO-SOURCE

我也曾尝试更改 'dependsOn:[]' 中的任务顺序,但它并没有改变任何东西...有人知道我的错误在哪里吗? 提前致谢

dependsOn 列表不强加任何顺序保证。通常,如果没有其他关系实际施加顺序保证,则首先列出的将首先执行。

(一个例子是,如果 clean 依赖于 build,那么在 dependsOn 属性中如何定义它并不重要,因为 build 将始终在 clean 之前是 运行。我很清楚事实并非如此,因此在括号中,只是为了澄清我的意思。)

要确定为什么最终 buildclean 之前是 运行 我不能在没有看到完整的构建脚本的情况下说。根据您发布的内容无法确定。

也许您想要的是 clean.shouldRunAfter buildclean.mustRunAfter build,它定义了一个排序约束而不添加依赖项。因此,您可以单独 运行 每个任务,但如果两者都是 运行,那么它们的顺序将按照您指定的方式定义。这两者之间的区别仅在并行任务执行时才有意义,然后应该 运行 after 意味着它们可以 运行 并行 iirc,必须 运行 after 不允许这样做。