Неможливо додати завдання "обгортка", оскільки завдання з цим ім'ям вже існує


112

Під час встановлення 'react-native init AwesomeProject' я отримую цю помилку під час запуску react-native run-android:

Could not determine java version from '11.0.1'.

Швидкий google підказує, що мені потрібно оновити програму distributionUrlв обгортці Gradle. Зробивши це, я зіткнувся з новою помилкою:

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

Це дозволяє припустити, що проблема знаходиться у файлі:

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

що виглядає так

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

Я знову і назад намагався розібратися, що це робить. Здається дивним, що щось не вийшло прямо з коробки. Хтось стикається з подібним питанням?


4
чи є оновлення чи відповідь правильно? Якщо ні, то як ви це вирішили? ще позначте правий значок у відповідь. >> :-)
Ганешдешмух

Відповіді:


160

Ви також можете оновити

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

до

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

Як

Переосмислення вбудованих завдань, які застаріли в 4.8, тепер призводить до помилки.

Спроба заміни вбудованого завдання призведе до помилки, подібної до наступного:

Неможливо додати завдання "обгортка", оскільки завдання з цим ім'ям вже існує.

див. останній абзац Завдання та властивості : https://docs.gradle.org/5.2.1/userguide/upgrading_version_4.html

та налаштування завдання Wrapper : https://docs.gradle.org/5.2.1/userguide/gradle_wrapper.html#customizing_wrapper


9
Ця відповідь не відповідає дійсному питанню ОП, але це дуже корисно для таких службовців Google, як я, тому я підтримав позицію.
Франклін Ю

Це вирішує проблему ОП. Він використовував стародавню версію Gradle, а потім прив’язував до оновлення за допомогою застарілого рішення, і ця відповідь забезпечує правильне рішення. (Звичайно, @FranklinYu, якщо ви вважаєте, "хтось стикається з подібним питанням?", Як питання ОП, то достатньо простого "так".
Michael Piefel

91

яку версію gradle ви використовуєте у своєму оточенні?

Якщо ви використовуєте gradle версії 5.x, ви повинні змінити 「обгортку завдань」, як показано нижче.

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

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

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

Потім ця помилка виникла. Не можу зрозуміти, що робити. ПОМИЛКА: Не вдалося знайти метод wrapper () для аргументів [{type = клас org.gradle.api.tasks.wrapper.Wrapper}, build_81gq92nveejavsi3t9efznmk8 $ _run_closure2 @ 55f5bac8] у кореневому проекті 'myproject' типу org.gradle.api.Project .
буддхів

21

Як згадується в коментарях, читайте далі - https://stackoverflow.com/a/46867575/4982729 :

  1. Відкрити та відредагувати файл app-folder/android/gradle/wrapper/gradle-wrapper.properties; оновити рядок

    distributionUrl=https\://services.gradle.org/distributions/gradle-5.0-all.zip
  2. У файлі AwesomeProject/android/build.gradleспробуйте коментувати

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

12

якщо файл "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

тоді ви можете видалити

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

від build.gradle


1

У мене те саме питання. Проблема в моєму коді полягала в подвійному оголошенні іншого файлу Gradle в build.gradle

build.gradle

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

0

Існує велика ймовірність, що у вас є "завдання" запустити у своєму файлі build.gradle, перейти та видалити рядок, пов’язаний із обгорткою (включаючи її дужку тощо). Потім, якщо ви використовуєте IntelliJ, він автоматично приведе нову у вашу робочу директорію.


0

Я зіткнувся з проблемою, тому що я виконував своє завдання, використовуючи глобальний gradle, а не свою локальну обгортку gradle.

тобто в моєму поточному каталозі у мене був gradlewвиконуваний файл.

Але я виконував цю команду:

gradle <task>

Коли я повинен був бігати:

./gradlew <task>

Імовірно, через те, що керуючи глобальним градлом, намагається створити локальну обгортку - і вже існує.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.