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

Posted

技术标签:

【中文标题】无法将任务“包装器”添加为具有该名称的任务已存在【英文标题】:Cannot add task 'wrapper' as a task with that name already exists 【发布时间】:2019-05-11 13:35:46 【问题描述】:

安装 'react-native init AwesomeProject' 运行 react-native run-android 时出现此错误:

Could not determine java version from '11.0.1'.

一个快速的谷歌建议我需要更新 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")

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

【问题讨论】:

是否有任何更新或正确答案?如果没有,那么您是如何解决的?否则答案上的右勾图标。>> :-) 【参考方案1】:

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

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

但我正在运行这个命令:

gradle <task>

我应该跑步的时候:

./gradlew <task>

大概是因为运行全局 gradle 会尝试创建一个本地包装器——而且一个已经存在。

【讨论】:

【参考方案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

【讨论】:

但是在这种情况下你不能从终端使用./gradle task【参考方案3】:

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

build.gradle

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

【讨论】:

【参考方案4】:

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

【讨论】:

【参考方案5】:

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

如果你使用 gradle version 5.x 你必须修改「task wrapper」如下。

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() .【参考方案6】:

正如在 cmets 中提到的那样 - https://***.com/a/46867575/4982729:

    打开并编辑文件app-folder/android/gradle/wrapper/gradle-wrapper.properties;更新线路

    distributionUrl=https\://services.gradle.org/distributions/gradle-5.0-all.zip
    

    在文件AwesomeProject/android/build.gradle 中尝试注释掉

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

【讨论】:

【参考方案7】:

你也可以更新

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

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

【讨论】:

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

以上是关于无法将任务“包装器”添加为具有该名称的任务已存在的主要内容,如果未能解决你的问题,请参考以下文章

Gradle Ant 无法添加任务 ':myproject:test' 作为具有该名称的任务已存在

Firebase云消息传递FCM构建错误无法添加任务':processDebugGoogleServices'作为具有该名称的任务已存在

Gradle productFlavors 引发错误 - 无法添加任务“:assembleTest”,因为具有该名称的任务已存在

无法添加任务':processDebugGoogleServices'作为具有该名称的任务已存在

Gradle:无法添加任务':helloFromBuild1',因为具有该名称的任务已经存在

Grails gradle“具有该名称的任务已经存在”