Não é possível adicionar 'wrapper' de tarefa porque já existe uma tarefa com esse nome

112

Ao instalar o 'react-native init AwesomeProject' , recebo este erro quando executo react-native run-android:

Could not determine java version from '11.0.1'.

Um rápido google sugere que eu preciso atualizar o distributionUrlno wrapper do Gradle. Tendo feito isso, encontro um novo erro:

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

Isso sugere que o problema está no arquivo:

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

que se parece com isso

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

Eu estive tentando descobrir o que isso faz. Parece estranho que algo não funcione direto da caixa. Alguém está enfrentando um problema semelhante?

Ben Kemp
fonte
4
existe alguma atualização ou qual é a resposta correta? Se não, como você resolveu? caso contrário, marque o ícone para a direita em uma resposta. >> :-)
ganeshdeshmukh

Respostas:

160

Você também pode atualizar

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

para

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

Como

Substituir tarefas integradas obsoletas no 4.8 agora produz um erro.

A tentativa de substituir uma tarefa integrada produzirá um erro semelhante ao seguinte:

Não é possível adicionar 'wrapper' de tarefa porque já existe uma tarefa com esse nome.

consulte o último parágrafo de Tarefas e propriedades : https://docs.gradle.org/5.2.1/userguide/upgrading_version_4.html

e Customizing the Wrapper task : https://docs.gradle.org/5.2.1/userguide/gradle_wrapper.html#customizing_wrapper

Zhouji
fonte
9
Essa resposta não responde à pergunta real de OP, mas é muito útil para Googlers como eu, então votei a favor.
Franklin Yu
Isso resolve o problema do OP. Ele estava usando uma versão antiga do Gradle e depois amarrou a atualização usando uma solução desatualizada, e essa resposta fornece a solução correta. (Claro, @FranklinYu, se você considerar “alguém está enfrentando um problema semelhante?” Como a pergunta do OP, um simples “sim” seria suficiente.)
Michael Piefel
91

qual versão do gradle você usa em seu ambiente?

Se você usar o Gradle versão 5.x, será necessário modificar o 「empacotador de tarefas」 conforme abaixo.

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

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

wrapper {
    gradleVersion = '4.4'
    distributionUrl = distributionUrl.replace("bin", "all")
}
石 塚 祐 輔
fonte
Então veio esse erro. Não consigo descobrir o que fazer. ERRO: Não foi possível encontrar o método wrapper () para os argumentos [{type = class org.gradle.api.tasks.wrapper.Wrapper}, build_81gq92nveejavsi3t9efznmk8 $ _run_closure2 @ 55f5bac8] no projeto raiz 'myproject' do tipo org.gradle.api.api .
buddhiv
21

Conforme mencionado nos comentários a seguir - https://stackoverflow.com/a/46867575/4982729 :

  1. Abra e edite o arquivo app-folder/android/gradle/wrapper/gradle-wrapper.properties; atualize a linha

    distributionUrl=https\://services.gradle.org/distributions/gradle-5.0-all.zip
  2. No arquivo, AwesomeProject/android/build.gradletente comentar

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

se o arquivo "gradle-wrapper.properties" já tiver esses códigos

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

então você pode remover

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

de build.gradle

Shubham
fonte
1

Eu tenho o mesmo problema. o problema no meu código era uma declaração dupla em outro arquivo Gradle em build.gradle

build.gradle

apply from: otherFile.gradle
... build. gradle code...
apply from: otherFile.gradle //Again 
HolyM
fonte
0

Há uma grande chance de você ter uma "tarefa" para executar em seu arquivo build.gradle, vá e remova a linha relacionada ao wrapper (incluindo seu colchete e assim por diante). Então, se você estiver usando o IntelliJ, ele trará automaticamente o novo para o seu diretório de trabalho.

Aramis NSR
fonte
0

Encontrei o problema porque estava executando minha tarefa usando o gradle global , e não meu local wrapper gradle .

ou seja, em meu diretório atual eu tinha um gradlew executável.

Mas eu estava executando este comando:

gradle <task>

Quando eu deveria estar correndo:

./gradlew <task>

Presumivelmente porque a execução do gradle global tenta criar um wrapper local - e um já existia.

Seb Charrot
fonte