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


112

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

Could not determine java version from '11.0.1'.

一个快速的谷歌建议我需要distributionUrl在Gradle-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")
}

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


4
是否有任何更新或正确的答案?如果没有,那么您如何解决呢?其他答案上的右勾图标。>> :-)
ganeshdeshmukh

Answers:


160

您也可以更新

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


9
这个答案不能回答OP的实际问题,但是对像我这样的Google员工来说非常有帮助,因此我投票赞成。
富兰克林·于

它确实解决了OP的问题。他使用的是古老的Gradle版本,然后使用过时的解决方案进行更新,因此此答案提供了正确的解决方案。(当然,@ FranklinYu,如果您将“有人面临类似的问题吗?”作为OP的问题,那么简单的“是”就足够了。)
Michael Piefel

91

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

然后这个错误来了。无法弄清楚该怎么办。错误:在根项目“ myproject”类型为org.gradle.api.Project的参数[{type = class org.gradle.api.tasks.wrapper.Wrapper},build_81gq​​92nveejavsi3t9efznmk8 $ _run_closure2 @ 55f5bac8]中找不到方法wrapper() 。
buddhiv

21

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

12

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


1

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

build.gradle

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

0

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


0

我遇到了这个问题,因为我是使用全局 gradle而不是本地 gradle包装器运行任务的。

即在我的当前目录中,我有一个gradlew可执行文件。

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

gradle <task>

当我应该跑步时:

./gradlew <task>

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.