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?

Ben Kemp
fuente
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

zhouji
fuente
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")
}
石 塚 祐 輔
fuente
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")
    }
Markroxor
fuente
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

Shubham
fuente
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 
HolyM
fuente
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.

Aramis NSR
fuente
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.

Seb Charrot
fuente