无法将任务“包装器”添加为具有该名称的任务已存在

IT技术 android reactjs react-native wrapper expo
2021-04-12 08:22:59

安装“react-native init AwesomeProject”时,我在运行时收到此错误react-native run-android

Could not determine java version from '11.0.1'.

一个快速的谷歌建议我需要更新distributionUrlGradle-wrapper 中的 。完成此操作后,我面临一个新错误:

Cannot add task 'wrapper' as a task with that name already exists.

它表明问题出在文件中:

/AwesomeProject/android/build.gradle' line: 36

看起来像这样

task wrapper(type: Wrapper) {
    gradleVersion = '4.4'
    distributionUrl = distributionUrl.replace("bin", "all")
}

我一直在试图弄清楚这是做什么的。有些东西开箱即用,这似乎很奇怪。有人面临类似的问题吗?

6个回答

你也可以更新

task wrapper(type: Wrapper) {
    gradleVersion = '4.4'    
    distributionUrl = distributionUrl.replace("bin", "all")
}

wrapper {
    gradleVersion = '4.4'
    distributionUrl = distributionUrl.replace("bin", "all")
}

作为

覆盖 4.8 中弃用的内置任务现在会产生错误。

尝试替换内置任务将产生类似于以下内容的错误:

无法添加任务“包装器”,因为该名称的任务已存在。

请参阅任务和属性的最后一段https : //docs.gradle.org/5.2.1/userguide/upgrading_version_4.html

自定义包装任务https : //docs.gradle.org/5.2.1/userguide/gradle_wrapper.html#customizing_wrapper

它确实解决了 OP 的问题。他使用的是古老的 Gradle 版本,然后使用过时的解决方案进行更新,这个答案提供了正确的解决方案。(当然,@FranklinYu,如果您将“有人面临类似问题吗?”作为 OP 的问题,那么简单的“是”就足够了。)
2021-06-02 08:22:59
这个答案并没有回答 OP 的实际问题,但它对像我这样的 Google 员工非常有帮助,所以我投了赞成票。
2021-06-08 08:22:59

您在您的环境中使用哪个版本的 gradle?

如果您使用 gradle 5.x 版,则必须修改“任务包装器”,如下所示。

task wrapper(type: Wrapper) {
    gradleVersion = '4.4'
    distributionUrl = distributionUrl.replace("bin", "all")
}

↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

wrapper {
    gradleVersion = '4.4'
    distributionUrl = distributionUrl.replace("bin", "all")
}
然后这个错误来了。想不通该怎么办。错误:在 org.gradle.api.Project 类型的根项目“myproject”上找不到参数 [{type=class org.gradle.api.tasks.wrapper.Wrapper}, build_81gq​​92nveejavsi3t9efznmk8$_run_closure2@55f5bac8] 的方法 wrapper() .
2021-06-18 08:22:59

如果“gradle-wrapper.properties”文件已经有这些代码

distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-all.zip

然后你可以删除

task wrapper(type: Wrapper) {
    gradleVersion = '4.4'
    distributionUrl = distributionUrl.replace("bin", "all")
}

来自 build.gradle

但在这种情况下,您不能./gradle task从终端使用
2021-06-19 08:22:59

正如评论中提到的 - https://stackoverflow.com/a/46867575/4982729

  1. 打开并编辑文件app-folder/android/gradle/wrapper/gradle-wrapper.properties更新行

    distributionUrl=https\://services.gradle.org/distributions/gradle-5.0-all.zip
    
  2. 在文件中AwesomeProject/android/build.gradle尝试注释掉

    task wrapper(type: Wrapper) {
        gradleVersion = '4.4'
        distributionUrl = distributionUrl.replace("bin", "all")
    }
    

我有同样的问题。我的代码中的问题是 build.gradle 中另一个 Gradle 文件的双重声明

构建.gradle

apply from: otherFile.gradle
... build. gradle code...
apply from: otherFile.gradle //Again