Impossible d'ajouter la tâche «wrapper» car une tâche avec ce nom existe déjà


112

Lors de l'installation de 'react-native init AwesomeProject', j'obtiens cette erreur lorsque je lance react-native run-android:

Could not determine java version from '11.0.1'.

Un rapide google suggère que je dois mettre à jour le distributionUrldans le Gradle-wrapper. Après avoir fait cela, je suis confronté à une nouvelle erreur:

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

Cela suggère que le problème se trouve dans le fichier:

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

qui ressemble à ça

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

J'ai essayé de comprendre ce que cela faisait. Il semble étrange que quelque chose ne fonctionne pas tout de suite. Quelqu'un est-il confronté à un problème similaire?


4
y a-t-il une mise à jour ou quelle est une réponse correcte? Si non, comment l'avez-vous résolu? autre icône coche-droite sur une réponse. >> :-)
ganeshdeshmukh

Réponses:


160

Vous pouvez également mettre à jour

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

à

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

Comme

Le remplacement des tâches intégrées obsolètes dans 4.8 génère désormais une erreur.

Tenter de remplacer une tâche intégrée produira une erreur similaire à la suivante:

Impossible d'ajouter la tâche «wrapper» car une tâche portant ce nom existe déjà.

voir le dernier paragraphe de Tâches et propriétés : https://docs.gradle.org/5.2.1/userguide/upgrading_version_4.html

et Personnalisation de la tâche Wrapper : https://docs.gradle.org/5.2.1/userguide/gradle_wrapper.html#customizing_wrapper


9
Cette réponse ne répond pas à la question réelle d'OP, mais elle est très utile pour les googleurs comme moi, alors j'ai voté pour.
Franklin Yu

Cela résout le problème du PO. Il utilisait une ancienne version de Gradle, puis lié à la mise à jour en utilisant une solution obsolète, et cette réponse fournit la bonne solution. (Bien sûr, @FranklinYu, si vous prenez "quelqu'un est-il confronté à un problème similaire?" Comme question du PO, alors un simple "oui" suffirait.)
Michael Piefel

91

quelle version de gradle utilisez-vous dans votre environnement?

Si vous utilisez la version 5.x de gradle, vous devez modifier 「wrapper de tâches」 comme ci-dessous.

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

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

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

Puis cette erreur est survenue. Je ne sais pas quoi faire. ERREUR: Impossible de trouver la méthode wrapper () pour les arguments [{type = class org.gradle.api.tasks.wrapper.Wrapper}, build_81gq92nveejavsi3t9efznmk8 $ _run_closure2 @ 55f5bac8] sur le projet racine 'myproject' de type org.gradle.api.api .
buddhiv

21

Comme mentionné dans les commentaires suivent - https://stackoverflow.com/a/46867575/4982729 :

  1. Ouvrez et modifiez le fichier app-folder/android/gradle/wrapper/gradle-wrapper.properties; mettre à jour la ligne

    distributionUrl=https\://services.gradle.org/distributions/gradle-5.0-all.zip
  2. Dans le fichier, AwesomeProject/android/build.gradleessayez de commenter

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

12

si le fichier "gradle-wrapper.properties" a déjà ces codes

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

alors vous pouvez supprimer

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

depuis build.gradle


1

J'ai le même problème. le problème dans mon code était une double déclaration sur un autre fichier Gradle dans build.gradle

build.gradle

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

0

Il y a de fortes chances que vous ayez une "tâche" à exécuter dans votre fichier build.gradle, supprimez la ligne relative au wrapper (y compris sa parenthèse et ainsi de suite). Ensuite, si vous utilisez IntelliJ, il amènera automatiquement le nouveau dans votre répertoire de travail.


0

J'ai rencontré le problème car j'exécutais ma tâche en utilisant le gradle global , et non mon fichier local wrapper de gradle .

c'est-à-dire que dans mon répertoire actuel j'avais un gradlew exécutable.

Mais j'exécutais cette commande:

gradle <task>

Quand j'aurais dû courir:

./gradlew <task>

Vraisemblablement parce que l'exécution du gradle global tente de créer un wrapper local - et il en existait déjà un.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.