Nie można dodać „opakowania” zadania jako zadania o tej nazwie już istnieje

112

Podczas instalowania programu „React-native init AwesomeProject” pojawia się ten błąd, gdy uruchamiam react-native run-android:

Could not determine java version from '11.0.1'.

Szybkie wyszukiwanie w Google sugeruje, że muszę zaktualizować zawartość distributionUrlw opakowaniu Gradle. Po wykonaniu tej czynności mam do czynienia z nowym błędem:

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

Sugeruje, że problem znajduje się w pliku:

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

który wygląda tak

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

W kółko próbowałem dowiedzieć się, co to robi. Wydaje się dziwne, że coś nie zadziała od razu po wyjęciu z pudełka. Czy ktoś ma podobny problem?

Ben Kemp
źródło
4
czy jest jakaś aktualizacja lub która jest poprawną odpowiedzią? Jeśli nie, to jak to rozwiązałeś? else ikona zaznaczenia w prawo przy odpowiedzi. >> :-)
ganeshdeshmukh

Odpowiedzi:

160

Możesz także zaktualizować

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

do

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

Tak jak

Zastępowanie wbudowanych zadań, które są przestarzałe w wersji 4.8, powoduje teraz błąd.

Próba zastąpienia wbudowanego zadania spowoduje błąd podobny do następującego:

Nie można dodać „opakowania” zadania jako zadania o tej nazwie już istnieje.

zobacz ostatni akapit Zadania i właściwości : https://docs.gradle.org/5.2.1/userguide/upgrading_version_4.html

i dostosowywanie zadania Wrapper : https://docs.gradle.org/5.2.1/userguide/gradle_wrapper.html#customizing_wrapper

zhouji
źródło
9
Ta odpowiedź nie odpowiada faktycznemu pytaniu OP, ale jest bardzo pomocna dla pracowników Google, takich jak ja, więc zagłosowałem za.
Franklin Yu
To rozwiązuje problem PO. Używał starej wersji Gradle, a następnie związał się z aktualizacją za pomocą przestarzałego rozwiązania, a ta odpowiedź zapewnia prawidłowe rozwiązanie. (Oczywiście, @FranklinYu, jeśli weźmiesz pod uwagę „czy ktoś ma podobny problem?” Jako pytanie OP, wystarczy proste „tak”.)
Michael Piefel
91

której wersji gradle używasz w swoim środowisku?

Jeśli używasz gradle w wersji 5.x, musisz zmodyfikować 「opakowanie zadania」 jak poniżej.

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

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

wrapper {
    gradleVersion = '4.4'
    distributionUrl = distributionUrl.replace("bin", "all")
}
石 塚 祐 輔
źródło
Wtedy pojawił się ten błąd. Nie mogę się dowiedzieć, co robić. BŁĄD: nie można znaleźć opakowania metody () dla argumentów [{type = class org.gradle.api.tasks.wrapper.Wrapper}, build_81gq92nveejavsi3t9efznmk8 $ _run_closure2 @ 55f5bac8] w głównym projekcie „myproject” typu org.gradle.api.Project .
buddhiv
21

Jak wspomniano w komentarzach poniżej - https://stackoverflow.com/a/46867575/4982729 :

  1. Otwórz i edytuj plik app-folder/android/gradle/wrapper/gradle-wrapper.properties; zaktualizuj linię

    distributionUrl=https\://services.gradle.org/distributions/gradle-5.0-all.zip
  2. W pliku AwesomeProject/android/build.gradlespróbuj wykomentować

    task wrapper(type: Wrapper) {
        gradleVersion = '4.4'
        distributionUrl = distributionUrl.replace("bin", "all")
    }
    
markroxor
źródło
12

jeśli plik „gradle-wrapper.properties” ma już te kody

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

następnie możesz usunąć

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

z build.gradle

Shubham Sharma
źródło
1

Mam ten sam problem. problem w moim kodzie polegał na podwójnej deklaracji innego pliku Gradle w build.gradle

build.gradle

apply from: otherFile.gradle
... build. gradle code...
apply from: otherFile.gradle //Again 
HolyM
źródło
0

Istnieje duże prawdopodobieństwo, że masz "zadanie" do uruchomienia w pliku build.gradle, idź i usuń wiersz związany z opakowaniem (łącznie z jego nawiasem itd.). Następnie, jeśli używasz IntelliJ, automatycznie przeniesie nowy do katalogu roboczego.

Aramis NSR
źródło
0

Wystąpił problem, ponieważ uruchamiałem zadanie przy użyciu globalnego gradle, a nie lokalnego opakowania gradle.

tj. w moim bieżącym katalogu miałem gradlewplik wykonywalny.

Ale uruchomiłem to polecenie:

gradle <task>

Kiedy powinienem biec:

./gradlew <task>

Prawdopodobnie dlatego, że uruchamianie globalnego gradle próbuje utworzyć lokalny wrapper - a taki już istniał.

Seb Charrot
źródło