Gradle 梯度任务依赖顺序
我有一个自定义gradle任务的问题:我想复制我的android jar库,然后将其重命名为“干净构建” 以下是我对它的定义:Gradle 梯度任务依赖顺序,gradle,android-gradle-plugin,gradle-plugin,Gradle,Android Gradle Plugin,Gradle Plugin,我有一个自定义gradle任务的问题:我想复制我的android jar库,然后将其重命名为“干净构建” 以下是我对它的定义: task('CreateJar', type: Copy, dependsOn: [':mylibmodule:clean', ':mylibmodule:build']){ doLast { from('build/intermediates/bundles/release/') into('libs') include('classes.
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')
}
}
问题在于,在渐变日志结果中,“清理”是在“生成”任务之后完成的,因此库永远不会复制到目标文件夹:
...
:mylibmodule:testReleaseUnitTest
:mylibmodule:test
:mylibmodule:check
:mylibmodule:build
:mylibmodule:clean
:mylibmodule:CreateJar NO-SOURCE
我还尝试更改“dependsOn:[]”中任务的顺序,但它没有改变任何东西。。。有人知道我的错误在哪里吗?
提前感谢此
dependsOn
列表不提供任何订购保证。通常,如果没有其他关系实际施加排序保证,则首先执行列出的内容
(一个例子是,如果clean
依赖于build
,那么在dependsOn
属性中如何定义它并不重要,因为build
总是在clean
之前运行。我很清楚情况并非如此,因此在括号中,只是为了澄清我的意思。)
要确定为什么最终build
会在clean
之前运行,我必须看到完整的构建脚本。从你发布的内容来看,这是无法确定的
可能您所追求的是
clean.shouldlrunafter build
或clean.mustRunAfter build
,它们定义了排序约束而不添加依赖项。因此,您可以单独运行每个任务,但如果两者都运行,则它们的顺序将按照您指定的顺序定义。这两者之间的区别只有在并行化任务执行时才相关,然后应该在后面运行意味着它们可以在并行iirc中运行,必须在后面运行不允许这样做。为什么创建一个Jar依赖于清理?在我用C编写代码时,总是在构建之前清理可能是一个旧的坏习惯。构建创建了一个aar,但我只需要在intermediates构建目录中创建jar。CreateJar任务更像是一个自动复制,我希望在构建目标目录期间完成它。谢谢您的回答;我不确定“订购保证”。事实上,“清理”和“构建”任务是由android gradle插件自动管理的,所以我不能改变它们的行为。我需要分析它所管理的hox,也许我必须尝试另一种方式确保你可以。您可以修改任何需要的任务。如果您想添加一个dependsOn
或一个shouldlrunafter
或任何东西,您可以毫无问题地完成它。应用插件可以添加和配置任务,之后您可以在构建脚本中自由更改它们。