No se puede agregar la tarea 'contenedor' ya que una tarea con ese nombre ya existe


112

Al instalar 'react-native init AwesomeProject' obtengo este error cuando ejecuto react-native run-android:

Could not determine java version from '11.0.1'.

Un google rápido sugiere que necesito actualizar el distributionUrlen el contenedor de Gradle. Habiendo hecho esto, me encuentro con un nuevo error:

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

Sugiere que el problema está en el archivo:

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

que se ve así

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

He estado yendo y viniendo tratando de averiguar qué hace esto. Parece extraño que algo no funcione de inmediato. ¿Alguien se enfrenta a un problema similar?


4
¿Hay alguna actualización o cuál es una respuesta correcta? Si no, ¿cómo lo resolvió? si no, marque el ícono a la derecha en una respuesta. >> :-)
— ganeshdeshmukh

Respuestas:


160

También puedes actualizar

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

a

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

Como

Reemplazar las tareas integradas obsoletas en 4.8 ahora produce un error.

Intentar reemplazar una tarea incorporada producirá un error similar al siguiente:

No se puede agregar la tarea 'contenedor' ya que una tarea con ese nombre ya existe.

consulte el último párrafo de Tareas y propiedades : https://docs.gradle.org/5.2.1/userguide/upgrading_version_4.html

y Personalización de la tarea Wrapper : https://docs.gradle.org/5.2.1/userguide/gradle_wrapper.html#customizing_wrapper


9
Esta respuesta no responde a la pregunta real de OP, pero es muy útil para los empleados de Google como yo, así que voté a favor.
— Franklin Yu

Soluciona el problema del OP. Estaba usando una versión antigua de Gradle y luego se vinculó para actualizar usando una solución obsoleta, y esta respuesta proporciona la solución correcta. (Por supuesto, @FranklinYu, si toma "¿alguien se enfrenta a un problema similar?" Como la pregunta del OP, entonces un simple "sí" sería suficiente.)
— Michael Piefel

91

¿Qué versión de gradle usas en tu entorno?

Si usa la versión 5.x de gradle, debe modificar el 「contenedor de tareas」 como se muestra a continuación.

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

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

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

Entonces vino este error. No sé qué hacer. ERROR: No se pudo encontrar el método wrapper () para los argumentos [{type = class org.gradle.api.tasks.wrapper.Wrapper}, build_81gq92nveejavsi3t9efznmk8 $ _run_closure2 @ 55f5bac8] en el proyecto raíz 'myproject' de tipo org.gradle.api.Project .
— buddhiv

21

Como se menciona en los comentarios a continuación, https://stackoverflow.com/a/46867575/4982729 :

  1. Abra y edite el archivo app-folder/android/gradle/wrapper/gradle-wrapper.properties; actualizar la línea

    distributionUrl=https\://services.gradle.org/distributions/gradle-5.0-all.zip
  2. En el archivo, AwesomeProject/android/build.gradleintente comentar

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

12

si el archivo "gradle-wrapper.properties" ya tiene estos códigos

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

entonces puedes eliminar

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

de build.gradle


1

Tengo el mismo problema. el problema en mi código fue una declaración doble en otro archivo Gradle en build.gradle

build.gradle

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

0

Existe una alta probabilidad de que tenga una "tarea" para ejecutar en su archivo build.gradle, vaya y elimine la línea relacionada con el contenedor (incluido su corchete, etc.). Luego, si está utilizando IntelliJ, automáticamente traerá el nuevo a su directorio de trabajo.


0

Me encontré con el problema porque estaba ejecutando mi tarea usando el gradle global , y no mi contenedor de gradle local .

es decir, en mi directorio actual tenía un gradlewejecutable.

Pero estaba ejecutando este comando:

gradle <task>

Cuando debería haber estado corriendo:

./gradlew <task>

Presumiblemente porque la ejecución del gradle global intenta crear un contenedor local, y ya existía uno.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.