Невозможно добавить «оболочку» задачи, поскольку задача с таким именем уже существует

113

При установке response-native init AwesomeProject я получаю эту ошибку при запуске react-native run-android:

Could not determine java version from '11.0.1'.

Быстрый гугл предлагает мне обновить distributionUrlфайл в Gradle-wrapper. Сделав это, я столкнулся с новой ошибкой:

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
есть ли обновление или какой правильный ответ? Если нет, то как вы ее решили? еще отметьте галочкой правый значок на ответе. >> :-)
ganeshdeshmukh 08

Ответы:

161

Вы также можете обновить

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
Этот ответ не отвечает на вопрос OP, но он очень полезен для таких гуглеров, как я, поэтому я проголосовал за.
Франклин Ю
Это решает проблему OP. Он использовал старую версию Gradle, а затем привязал к обновлению устаревшее решение, и этот ответ дает правильное решение. (Конечно, @FranklinYu, если вы возьмете «кто-нибудь сталкивается с подобной проблемой?» В качестве вопроса ОП, тогда будет достаточно простого «да».)
Майкл Пифель
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 = class org.gradle.api.tasks.wrapper.Wrapper}, build_81gq92nveejavsi3t9efznmk8 $ _run_closure2 @ 55f5bac8] в корневом проекте 'myproject' типа org.Project.api .
buddhiv
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")
    }
Markroxor
источник
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 
HolyM
источник
0

Есть большая вероятность, что у вас есть «задача» для запуска в вашем файле build.gradle, перейдите и удалите строку, связанную с оболочкой (включая ее скобку и т. Д.). Затем, если вы используете IntelliJ, он автоматически перенесет новый в ваш рабочий каталог.

Арамис СМП
источник
0

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

т.е. в моем текущем каталоге у меня был gradlewисполняемый файл.

Но я выполнял эту команду:

gradle <task>

Когда я должен был бежать:

./gradlew <task>

Предположительно потому, что запуск глобального gradle пытается создать локальную оболочку - а она уже существует.

Себ Шарро
источник