【问题标题】:Declaring custom 'clean' task when using the standard Gradle lifecycle plugins is not allowed不允许在使用标准 Gradle 生命周期插件时声明自定义“清理”任务
【发布时间】:2025-12-16 03:40:01
【问题描述】:

我正在向 jCenter 添加一个库,为此我需要在我的项目的 build.gradle 文件中添加一些插件。但是,我收到了错误

不允许在使用标准 Gradle 生命周期插件时声明自定义“清理”任务。

我可以看到task clean 块,当我删除它时,错误消失了。我认为这就是我需要做的所有事情,但它之前是否做过重要的事情?如果我删除了插件并且忘记重新添加 clean 块,会有什么可怕的后果?

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.3.1'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

plugins {
    id "com.jfrog.bintray" version "1.7.3"
    id "com.github.dcendents.android-maven" version "1.5"
}

allprojects {
    repositories {
        jcenter()
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

Thisthis 这没有令人满意地回答问题。

【问题讨论】:

  • 查看techusall.com/…链接。里面解释了一切。当然这会有所帮助!
  • @Suragch 我在使用 com.github.dcendents.android-maven 时遇到了同样的问题,你是如何解决这个问题的?
  • @Nainal,我想当时我刚刚删除了 clean 块。不过,我认为这不是解决方案,而且我从未觉得自己理解了问题或如何正确解决问题。
  • @Suragch 谢谢

标签: android-studio gradle plugins


【解决方案1】:

您不应尝试覆盖默认的clean 任务,而是将其配置为删除其他内容,例如

clean {
    delete rootProject.buildDir
}

但首先检查这是否不是 clean 任务的默认行为。

或者,如果您希望能够单独执行特定的清理操作,您还可以定义一个单独的任务并添加一个依赖项,例如

task customClean(type: Delete) {
    delete rootProject.buildDir
}
clean.dependsOn customClean

【讨论】:

  • 我有同样的问题,我没有尝试覆盖任何东西。它在 Android Studio 生成的 Gradle 脚本中。
  • 不会降低我的回答的有效性。将生成的脚本更改为有效并向 AS 错误跟踪器投诉。
  • @Vampire,你说的很对。感谢您的洞察力。仍然需要弄清楚为什么开箱即用的Android应用添加task clean...的根源
【解决方案2】:

从您的代码中删除这些行。

task clean(type: Delete) {
    delete rootProject.buildDir
}

【讨论】:

  • 为什么会出现在首位?去除它有任何负面影响吗?
  • 在我的情况下没有负面影响发生
  • 谢谢@ChaudharyNouman。我不明白这背后的逻辑。因为当我以前添加 kotlin 时会自动添加到 gradle 文件中。请告诉我
  • @彼得。因为 Gradle 支持依赖的自动下载和配置。
【解决方案3】:

tools>kotlin>configure 在项目中你必须选择 Android Gradle 而不是 gradle

【讨论】:

  • 我不明白。这与自定义清理任务有什么关系?
  • 您是否收到此错误 :Error:(24, 0) 不允许在使用标准 Gradle 生命周期插件时声明自定义“清理”任务。
  • 当我在项目中使用 Gradle 配置 kotlin 时出现上述错误,当我使用 Gradle 使用 Android 编译时,我没有收到该错误
  • 这个问题对我来说是为 kotlin 插件获得的
  • 我没有使用 Kotlin,但也许您的回答可以帮助其他人。
【解决方案4】:

在给定的代码中:

allprojects {
repositories {
    google()
    jcenter()
    mavenCentral()
}

tasks.withType(JavaCompile) {
    sourceCompatibility = "1.8"
    targetCompatibility = "1.8"
}


task clean(type: Delete) {
    delete rootProject.buildDir
}
}

task clean 替换为task delete 即可:

allprojects {
repositories {
    google()
    jcenter()
    mavenCentral()
}

tasks.withType(JavaCompile) {
    sourceCompatibility = "1.8"
    targetCompatibility = "1.8"
}


task delete(type: Delete) {
    delete rootProject.buildDir`
}
}

【讨论】:

  • task deletetask clean有区别吗?
【解决方案5】:

不幸的是,我遇到了同样的问题,我把task clean 放在了错误的位置。我有这个:

allprojects {
    repositories {
        google()
        jcenter()
        mavenCentral()
    }

    tasks.withType(JavaCompile) {
        sourceCompatibility = "1.8"
        targetCompatibility = "1.8"
    }


    task clean(type: Delete) {
        delete rootProject.buildDir
    }
}

应该是这样的:

allprojects {
    repositories {
        google()
        jcenter()
        mavenCentral()
    }

    tasks.withType(JavaCompile) {
        sourceCompatibility = "1.8"
        targetCompatibility = "1.8"
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

【讨论】:

    【解决方案6】:
    enter code hereallprojects {
    repositories {
        google()
        jcenter()
        maven {
            url 'https://maven.google.com'
        }
    }
    

    }

    task clean(type: Delete) {
        delete rootProject.buildDir
    }
    

    如果您在“build.gradle”中添加了 maven,请检查所有括号。代码应该如上。它应该可以解决问题。括号可能放置在不同的位置。

    【讨论】:

      【解决方案7】:

      经过这么多研究,我发现我们只需要在 bulid.gradle(Project) 中注释干净任务行,如下所示:

      //    task clean(type: Delete) {
      //        delete rootProject.buildDir
      //    }][1][enter image description here][1]
      

      See the image for hint

      【讨论】:

      • 这没有回答问题,这说明了如何(OP 想通了,因此:“我可以看到任务清理块,当我删除它时,错误消失了”)。他们在问“会有什么可怕的后果?”如果以后不恢复的话。
      【解决方案8】:

      6m 好的,我在 Gradle 中收到一个错误,它无法清理根项目文件。

      :25 AM Gradle 同步失败:不允许在使用标准 Gradle 生命周期插件时声明自定义“清理”任务。

      错误代码 info-ide.actionsShowFilePathAction 退出代码 1

      Clean Triggers nom run clean dependsOn"npmInstall"

      在 Gradle 文档 4.7 中 执行 Build 的目录中的 Project 也被配置,但仅在 Gradle 执行时没有任何任务。这样,在按需配置项目时,默认任务的行为正确。

      按需配置 Gradle 4.6 带有 Gradle 的 Gradle 3.01 或 3.1.0 的 Android 插件 Gradle 属性文件 org.gradleconfigureondemand=false

      所以我所做的就是将任务注释掉干净,现在我得到一个构建的话,

      我认为如果您已经构建和修改了项目,则此脚本可以正常工作。 当您下载该项目时,您还没有第一次构建它。因此,没有要清理的根项目路径,因为它尚未构建。这会导致它失败。 通过在第一次没有收到错误时将其注释掉。

      这里是代码。 // *构建文件,您可以在其中添加所有子项目/模块通用的配置选项。

      ` 构建脚本 { ext.kotlin_version = ‘1.2.41’

           ext.support_version = '26.1.0'
      
      repositories {
          google()
          jcenter()
      }
      
      dependencies {
          classpath 'com.android.tools.build:gradle:3.1.2'
          classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
      }
      }
      apply plugin: ‘kotlin’
      
      allprojects {
      repositories {
      google()
      jcenter()
      }
      }
      
      /*
      task clean(type: Delete) {
      delete rootProject.buildDir
      
      } */
      
      '
      

      【讨论】: