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.