gpt4 book ai didi

gradle - 为什么某些gradle任务无法访问?

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

gradlew tasks给了我这些任务(以及其他任务):

assemble - Assembles all variants of all applications and secondary packages.
assembleAndroidTest - Assembles all the Test applications.
assembleDebug - Assembles all Debug builds.
assembleRelease - Assembles all Release builds.
build - Assembles and tests this project.
buildDependents - Assembles and tests this project and all projects that depend on it.
buildNeeded - Assembles and tests this project and all projects it depends on.
clean - Deletes the build directory.
cleanBuildCache - Deletes the build cache directory.
compileDebugAndroidTestSources
compileDebugSources
compileDebugUnitTestSources
compileReleaseSources
compileReleaseUnitTestSources
mockableAndroidJar - Creates a version of android.jar that's suitable for unit tests.

我可以添加其他代码说 assemble,如下所示:
assemble {
doFirst {
println "hello"
}
}

但无法与此列表中的许多其他对象一起执行此操作,例如,尝试添加到 assembleDebug中会出现以下错误:
Error:(65, 0) Could not find method assembleDebug() for arguments [build_6s1kvuwgpamstoh3d4xsg1ndv$_run_closure3@13494795] on project ':app' of type org.gradle.api.Project.

这是为什么?

最佳答案

这很容易解释。当您运行gradle脚本时,将按声明顺序对其进行评估。但是-有时,并且android项目就是一个很好的例子-您不(也无法)知道可以创建哪些任务,因为它们基于项目的内容(文件,变体等)。因此,将在对整个项目进行评估后立即创建这些任务。这就是为什么您无法使用build.gradle访问它们的原因-因为项目评估尚未完成。

现在,如果您知道将创建一个名为assembleDebug的任务,则可以在评估后使用[afterEvaluate] 1配置该任务。此时,将评估整个项目,并添加/生成所有任务。

所以:

project.afterEvaluate {
assembleDebug {
doFirst {
println "hello"
}
}
}

关于gradle - 为什么某些gradle任务无法访问?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42648124/

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