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

Ben*_*emp 81 android wrapper reactjs react-native expo

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

Could not determine java version from '11.0.1'.
Run Code Online (Sandbox Code Playgroud)

一个快速的谷歌建议我需要更新Gradle-wrapper中的distributionUrl.这样做后,我面临一个新的错误

Cannot add task 'wrapper' as a task with that name already exists.
Run Code Online (Sandbox Code Playgroud)

它表明问题出在文件中:

/AwesomeProject/android/build.gradle' line: 36
Run Code Online (Sandbox Code Playgroud)

看起来像这样

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

我一直在试图弄清楚这是做什么的.奇怪的是,某些东西不能直接开箱即用.是否有人面临类似的问题?

zho*_*uji 113

您也可以更新

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

wrapper {
    gradleVersion = '4.4'
    distributionUrl = distributionUrl.replace("bin", "all")
}
Run Code Online (Sandbox Code Playgroud)

现在,覆盖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的实际问题,但是对像我这样的Google员工来说非常有帮助,因此我投票赞成。 (5认同)
  • 它确实解决了OP的问题。他使用的是古老的 Gradle 版本,然后使用过时的解决方案进行更新,这个答案提供了正确的解决方案。(当然,@FranklinYu,如果您将“有人面临类似问题吗?”作为OP的问题,那么简单的“是”就足够了。) (2认同)

小智 78

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

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

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

????????????????

wrapper {
    gradleVersion = '4.4'
    distributionUrl = distributionUrl.replace("bin", "all")
}
Run Code Online (Sandbox Code Playgroud)

  • 然后就出现了这个错误。不知道该怎么办。错误:在 org.gradle.api.Project 类型的根项目“myproject”上找不到参数 [{type=class org.gradle.api.tasks.wrapper.Wrapper}、build_81gq​​92nveejavsi3t9efznmk8$_run_closure2@55f5bac8] 的方法wrapper() 。 (2认同)

小智 23

如果“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
Run Code Online (Sandbox Code Playgroud)

然后你可以删除

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

来自 build.gradle


mar*_*xor 20

正如评论中提到的那样 - /sf/answers/3280730281/:

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

    distributionUrl=https\://services.gradle.org/distributions/gradle-5.0-all.zip
    
    Run Code Online (Sandbox Code Playgroud)
  2. 在文件中AwesomeProject/android/build.gradle尝试评论

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