我有一个自定义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'任务之后完成的,因此lib永远不会复制到目标文件夹:
...
:mylibmodule:testReleaseUnitTest
:mylibmodule:test
:mylibmodule:check
:mylibmodule:build
:mylibmodule:clean
:mylibmodule:CreateJar NO-SOURCE
我也尝试改变'dependsOn:[]'中的任务顺序,但它没有改变任何东西......有没有人知道我的错误在哪里?提前致谢
1 回答
dependsOn
列表不会强加任何订购保证 . 通常,如果没有其他关系实际上强加订购保证,则首先执行首先列出的内容 .(一个例子是如果
clean
依赖于build
,那么在dependsOn
属性中如何定义它并不重要,因为build
将始终在clean
之前运行 . 这不是我的情况,因此在括号中,只是澄清我的意思 . )要确定为什么最终
build
在clean
之前运行,我不能说没有看到完整的构建脚本 . 从您发布的内容来看,这是不可确定的 .也许您所追求的是
clean.shouldRunAfter build
或clean.mustRunAfter build
,它们定义了排序约束而不添加依赖关系 . 因此,您可以单独运行每个任务,但如果两个任务都运行,那么它们的顺序将根据您的指定进行定义 . 这两者之间的区别仅在并行化任务执行时才有意义,然后应该在它们可以并行运行之后运行,必须在不允许的情况下运行 .