找不到 Gradle 任务,但存在于任务列表中

Gradle task is not found, but exist in tasks list

提问人:KoirN 提问时间:10/9/2018 最后编辑:riQQKoirN 更新时间:11/17/2023 访问量:2975

问:

我想为一个 Android 项目创建一个自定义 gradle 任务,该任务将调用其他任务链,具体取决于构建风格和构建配置。

所以,我在build.gradle.kts(我们使用kotlin脚本)中所做的

gradle.projectsEvaluated {
    rootProject.allprojects.filter { project ->
        !Config.CodeQuality.ignoredProjects.contains(project.name)
    }.forEach { project ->
        project.tasks.filter { task ->
            task.name.startsWith("lint")
        }.forEach { task ->
            val taskSyfix = task.name.drop(4)
            val taskName = "codeQuality$taskSyfix"
            println("qualityscripts create task $taskName")
            project.tasks.create(taskName) {
                group = "verification"
                dependsOn("checkstyle", "deteltCkeck", "ktlint", task.name)
            }
        }
    }
}

因此,如果我运行 ./gradlew 任务

...
Verification tasks
------------------ 
check - Runs all checks. checkstyle - Runs checkstyle. 
codeQuality 
codeQualityDebug 
codeQualityDevMenuFlavor1Debug
codeQualityDevMenuFlavor1Release 
codeQualityDevMenuFlavor2Debug
codeQualityDevMenuFlavor2Release 
...

所以它们存在。但是,如果我尝试运行任何错误,我会出现下一个错误:

  • 出了什么问题:在根项目“myproject-android”中找不到任务“codeQualityDevMenuFlavor1Debug”。
gradle android-gradle-插件

评论

0赞 M.Ricciuti 10/9/2018
如果这些任务是在子项目(例如子项目)上创建的,则需要提供完整的任务路径:app./gradlew :app:codeQualityDevMenuFlavor1Debug
1赞 KoirN 10/9/2018
如果我以这种方式运行,我会遇到同样的问题。我认为生命周期中的问题 - gradle 在添加之前尝试调用任务,但是我看到的一些示例使用了类似的方法
0赞 M.Ricciuti 10/12/2018
在禁用按需配置后,您是否找到一些时间重新测试?我很想知道这是否解决了您的问题。

答:

3赞 M.Ricciuti 10/10/2018 #1

我可以重现您的问题,我认为它已连接到按需配置执行模式,该模式似乎已在您的环境中启用。您可以尝试禁用此模式并重新测试吗?(在 Android Studio 中::取消选中“按需配置”选项)。File > Settings > Build, Execution, Deployment > Compiler

看起来当启用此模式时,当您尝试执行已动态创建的任务(例如:您的 * 任务)时: Gradle 不会执行块 :因此,在您的情况下,您的自定义任务将不会被创建,从而导致错误codeQualitygradle.projectsEvaluated {}Task 'codeQualityDevMenuFlavor1Debug' not found

有关按需配置功能的详细信息,请参阅按需配置此答案

Android Studio 和此模式也存在一些已知问题,请参阅:当前版本的 Android Gradle 插件不支持按需配置