Impossibile aggiungere il "wrapper" dell'attività poiché esiste già un'attività con quel nome


112

Durante l'installazione di 'react-native init AwesomeProject' ottengo questo errore quando eseguo react-native run-android:

Could not determine java version from '11.0.1'.

Un rapido google suggerisce che devo aggiornare distributionUrlnel Gradle-wrapper. Fatto ciò, mi trovo di fronte a un nuovo errore:

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

Suggerisce che il problema sia nel file:

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

che assomiglia a questo

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

Sono stato avanti e indietro cercando di capire cosa fa. Sembra strano che qualcosa non funzioni immediatamente. Qualcuno sta affrontando un problema simile?


4
c'è qualche aggiornamento o quale è una risposta corretta? In caso contrario, come l'hai risolto? altro segno di spunta a destra su una risposta. >> :-)
— ganeshdeshmukh

Risposte:


160

Puoi anche aggiornare

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

per

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

Come

L'override delle attività incorporate deprecate nella 4.8 ora produce un errore.

Il tentativo di sostituire un'attività incorporata produrrà un errore simile al seguente:

Impossibile aggiungere il "wrapper" dell'attività poiché esiste già un'attività con quel nome.

vedere l'ultimo paragrafo di Attività e proprietà : https://docs.gradle.org/5.2.1/userguide/upgrading_version_4.html

e personalizzazione dell'attività wrapper : https://docs.gradle.org/5.2.1/userguide/gradle_wrapper.html#customizing_wrapper


9
Questa risposta non risponde alla domanda effettiva di OP, ma è molto utile per i googler come me, quindi ho votato.
— Franklin Yu,

Risolve il problema dell'OP. Stava usando un'antica versione di Gradle e poi legato all'aggiornamento usando una soluzione obsoleta, e questa risposta fornisce la soluzione corretta. (Ovviamente, @FranklinYu, se prendi "qualcuno sta affrontando un problema simile?" Come domanda dell'OP, allora un semplice "sì" sarebbe sufficiente.)
— Michael Piefel

91

quale versione di gradle usi nel tuo ambiente?

Se usi gradle versione 5.x devi modificare 「task wrapper」 come sotto.

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

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

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

Poi è arrivato questo errore. Non riesco a capire cosa fare. ERRORE: impossibile trovare il metodo wrapper () per gli argomenti [{type = class org.gradle.api.tasks.wrapper.Wrapper}, build_81gq92nveejavsi3t9efznmk8 $ _run_closure2 @ 55f5bac8] sul progetto root 'myproject' di tipo org.gradle.Project.api.api .
— buddhiv

21

Come accennato nei commenti seguono - https://stackoverflow.com/a/46867575/4982729 :

  1. Apri e modifica il file app-folder/android/gradle/wrapper/gradle-wrapper.properties; aggiorna la linea

    distributionUrl=https\://services.gradle.org/distributions/gradle-5.0-all.zip
  2. Nel file AwesomeProject/android/build.gradleprova a commentare

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

12

se il file "gradle-wrapper.properties" ha già questi codici

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

quindi puoi rimuovere

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

da build.gradle


1

Ho lo stesso problema. il problema nel mio codice era una doppia dichiarazione su un altro file Gradle in build.gradle

build.gradle

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

0

C'è un'alta probabilità che tu abbia un "compito" da eseguire nel tuo file build.gradle, vai e rimuovi la riga relativa al wrapper (inclusa la sua parentesi e così via). Quindi, se stai usando IntelliJ, porterà automaticamente quello nuovo nella tua directory di lavoro.


0

Mi sono imbattuto nel problema perché stavo eseguendo la mia attività utilizzando il gradle globale e non il mio wrapper gradle locale .

cioè nella mia directory corrente avevo un gradleweseguibile.

Ma stavo eseguendo questo comando:

gradle <task>

Quando avrei dovuto correre:

./gradlew <task>

Presumibilmente perché l'esecuzione del gradle globale cerca di creare un wrapper locale - e ne esisteva già uno.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.