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

时间:2018-12-10 16:00:30

标签: android reactjs react-native wrapper expo

在安装'react-native init AwesomeProject'时,然后在运行'react-native run-android'时遇到上述错误

Could not determine java version from '11.0.1'.

一个快速的Google建议我需要在Gradle-wrapper中更新distributionUrl。完成此操作后,我将面临新的错误

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")
}

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

8 个答案:

答案 0 :(得分:44)

您还可以更新

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

答案 1 :(得分:34)

您在您的环境中使用哪个版本的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")
}

答案 2 :(得分:14)

如评论中所述-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")
    }
    

答案 3 :(得分:2)

尝试删除代码:

  

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

从第36行开始(如cmd中所述)。

答案 4 :(得分:2)

如果“ 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

答案 5 :(得分:0)

您很有可能在build.gradle文件中运行一个“任务”,然后删除 与包装器相关的行(包括其括号等)。 然后,如果您使用的是IntelliJ,它将自动将新的带到您的工作目录中。

答案 6 :(得分:0)

我有同样的问题。我代码中的问题是build.gradle

中另一个Gradle文件的双重声明

build.gradle

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

答案 7 :(得分:0)

之所以遇到这个问题,是因为我是使用 global gradle而不是我的 local gradle包装器运行任务的。

即在当前目录中,我有一个https://localhost:8082/host可执行文件。

但是我正在运行以下命令:

gradlew

当我应该跑步时:

gradle <task>

大概是因为运行全局gradle试图创建一个本地包装器-并且已经存在一个包装器。