当前位置: 首页 > 知识库问答 >
问题:

分级任务依赖顺序

严易安
2023-03-14

我有一个自定义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

我也尝试过在“depends on:[]”中更改任务的顺序,但这并没有改变任何东西...有人知道我错在哪里吗?提前致谢

共有1个答案

苏富
2023-03-14

dependson列表不强制任何排序保证。通常情况下,如果没有其他关系实际施加订单保证,那么首先列出的就会首先执行。

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

要确定为什么build最终在clean之前运行,我必须看到完整的构建脚本。从你发布的内容来看,这是无法确定的。

可能您需要的是clean.shouldrunafter buildclean.mustrunafter build,它们定义了排序约束,而不添加依赖项。因此您可以单独运行每个任务,但如果两个任务都运行,则它们的顺序将按照您指定的顺序定义。这两者之间的区别只有在并行化任务执行时才有关系,然后应该在后面运行意味着它们可以在并行iirc中运行,而必须在后面运行则不允许这样做。

 类似资料:
  • 将gradle及其spring-boot插件(1.5.1)和第一个spirit插件一起使用会引发一个错误: b)如何从“启动重新打包”中删除“fsm”的依赖项? c)是否可以显示一个分级任务依赖关系图?(不是项目依赖关系)

  • 有没有办法在Gradle中列出显式调用的任务?例如,如果task1依赖于task2和task2依赖于task3,并且我调用gradle来执行task1和task3,我想要一个返回的函数。

  • 在Java中开发Gradle插件所需要的确切依赖是什么?理想情况下,我希望从一个著名的存储库(如Maven Central或类似的存储库)获取它。 我有一个具有核心功能的Maven项目,我刚刚添加了两个额外的插件,一个用于Ant,一个用于Maven。它们已经经过测试并正在工作;放轻松!现在,我想为Gradle插件添加第三个模块,以使该功能也可从任何Gradle项目中获得。 null 如果有人能告诉

  • 我正在做一个需要调用其他任务的任务。 我尝试通过添加build.dependson clean来修复原始目标,但这似乎没有影响。 感谢任何帮助。

  • 编辑:我在这里建立了一个关于Opal解决方案的演示基础:github.com/stianlagstad/flyway-migration-error-causes-final-gradle-task-to-non-execute。克隆它并运行。迁移将失败,最后一个gradle任务将不会运行(将显示容器仍在运行)。如果修复了迁移文件,那么一切都将按预期进行。我肯定我误会了什么。任何指示都将是有帮助的