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.