gpt4 book ai didi

gradle - 语句执行顺序未遵循gradle吗?

转载 作者:行者123 更新时间:2023-12-03 04:01:09 25 4
gpt4 key购买 nike

我需要将文件名称从Android应用程序变体传输到Maven发布 Artifact 。我的build.gradle中的构造是:

publishing {
publications {
maven(MavenPublication) {
groupId android.defaultConfig.applicationId
artifactId 'apk'
version = project.ext.version

artifacts = {
def list = []
android.applicationVariants.all { variant ->
variant.outputs.each { output ->
list.add (output.outputFile.absolutePath)
println "Output " + output.outputFile.absolutePath + " list " + list
}
}
println "To deploy " + list
list.iterator()
}
}
}
}

此脚本从未部署任何 Artifact ,并且它产生的输出看起来像是机器的提升:
To deploy []
Output B:\ox\app\build\outputs\apk\app-debug-1.0.apk list [B:\ox\app\build\outputs\apk\app-debug-1.0.apk]
Output B:\ox\app\build\outputs\apk\app-release-1.0.apk list [B:\ox\app\build\outputs\apk\app-debug-1.0.apk, B:\ox\app\build\outputs\apk\app-release-1.0.apk]

因此,所有文件都经过了很好的迭代,但是由于某种原因,最后一个打印语句在终端打印语句之前运行,并且所有构造都只返回空列表。

为什么会发生这种情况,以及如何解决?我需要为Maven发布设置迭代文件列表和artifacts属性。

最佳答案

Gradle是一种声明性语言,因此语句的顺序并不重要。生成以以下方式执行:

1)脚本按编写顺序进行评估。这就是Gradle如何找出脚本中有哪些任务以及要加载哪些插件的方法。并不是说任务本身不会在那时执行。

2)然后Gradle构造一个需要执行的所有任务的DAG。每个任务都可以声明依赖关系,这些依赖关系是必须事先执行的任务。

3)构建DAG之后,将运行任务。任务根据其声明的依赖关系运行。没有依赖性的任务会首先运行,可能会并行运行。具有依赖项的任务计划在其所有先前任务完成之后运行。同样,如果可能的话,Gradle将并行运行事物。

3a)按照以下顺序运行任务。首先执行doFirst {}块,然后执行任务主体,然后执行doLast {}块。

因此,如果您要组成 Artifact 列表,则应将迭代器包含在doFirst {}块中。

关于gradle - 语句执行顺序未遵循gradle吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41724872/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com