Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Gradle 梯度任务依赖顺序_Gradle_Android Gradle Plugin_Gradle Plugin - Fatal编程技术网

Gradle 梯度任务依赖顺序

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.

我有一个自定义gradle任务的问题:我想复制我的android jar库,然后将其重命名为“干净构建” 以下是我对它的定义:

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
或任何东西,您可以毫无问题地完成它。应用插件可以添加和配置任务,之后您可以在构建脚本中自由更改它们。