Tidak dapat menambahkan 'pembungkus' tugas karena tugas dengan nama tersebut sudah ada

112

Saat menginstal 'react-native init AwesomeProject' saya mendapatkan kesalahan ini ketika saya menjalankan react-native run-android:

Could not determine java version from '11.0.1'.

Google cepat menyarankan saya perlu memperbarui distributionUrldalam Gradle-wrapper. Setelah melakukan ini, saya dihadapkan pada kesalahan baru:

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

Ini menunjukkan bahwa masalahnya ada di file:

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

yang terlihat seperti ini

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

Saya telah bolak-balik mencoba mencari tahu apa fungsinya. Tampaknya aneh bahwa ada sesuatu yang tidak akan langsung berfungsi begitu saja. Apakah ada yang menghadapi masalah serupa?

Ben Kemp
sumber
4
apakah ada pembaruan atau mana jawaban yang benar? Jika tidak, lalu bagaimana Anda menyelesaikannya? lain, centang ikon kanan pada jawaban. >> :-)
ganeshdeshmukh

Jawaban:

160

Anda juga dapat memperbarui

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

untuk

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

Sebagai

Mengganti tugas built-in yang tidak digunakan lagi di 4.8 sekarang menghasilkan error.

Mencoba mengganti tugas bawaan akan menghasilkan kesalahan yang mirip dengan berikut ini:

Tidak dapat menambahkan 'pembungkus' tugas karena tugas dengan nama tersebut sudah ada.

lihat paragraf terakhir Tugas & properti : https://docs.gradle.org/5.2.1/userguide/upgrading_version_4.html

dan Menyesuaikan tugas Wrapper : https://docs.gradle.org/5.2.1/userguide/gradle_wrapper.html#customizing_wrapper

zhouji
sumber
9
Jawaban ini tidak menjawab pertanyaan OP yang sebenarnya, tetapi sangat membantu untuk Googler seperti saya, jadi saya memberi suara positif.
Franklin Yu
Itu memecahkan masalah OP. Dia menggunakan versi Gradle kuno dan kemudian terikat ke pembaruan menggunakan solusi yang sudah ketinggalan zaman, dan jawaban ini memberikan solusi yang tepat. (Tentu saja, @FranklinYu, jika Anda menganggap "apakah ada yang menghadapi masalah serupa?" Sebagai pertanyaan OP, maka "ya" yang sederhana sudah cukup.)
Michael Piefel
91

versi gradle mana yang Anda gunakan di lingkungan Anda?

Jika Anda menggunakan gradle versi 5.x Anda harus memodifikasi 「pembungkus tugas」 seperti di bawah ini.

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

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

wrapper {
    gradleVersion = '4.4'
    distributionUrl = distributionUrl.replace("bin", "all")
}
石 塚 祐 輔
sumber
Kemudian kesalahan ini datang. Tidak tahu apa yang harus dilakukan. KESALAHAN: Tidak dapat menemukan metode wrapper () untuk argumen [{type = class org.gradle.api.tasks.wrapper.Wrapper}, build_81gq92nveejavsi3t9efznmk8 $ _run_closure2 @ 55f5bac8] pada proyek root 'myproject' jenis org.gradle.api.Project .
buddhiv
21

Seperti yang disebutkan dalam komentar ikuti - https://stackoverflow.com/a/46867575/4982729 :

  1. Buka dan edit file app-folder/android/gradle/wrapper/gradle-wrapper.properties; perbarui baris

    distributionUrl=https\://services.gradle.org/distributions/gradle-5.0-all.zip
  2. Dalam file, AwesomeProject/android/build.gradlecoba beri komentar

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

jika file "gradle-wrapper.properties" sudah memiliki kode ini

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

lalu Anda bisa menghapusnya

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

dari build.gradle

shubham
sumber
1

Saya memiliki masalah yang sama. masalah dalam kode saya adalah deklarasi ganda pada file Gradle lain di build.gradle

build.gradle

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

Ada kemungkinan besar Anda memiliki "tugas" untuk dijalankan di file build.gradle Anda, buka dan hapus baris yang terkait dengan wrapper (termasuk braketnya dan sebagainya). Kemudian, jika Anda menggunakan IntelliJ, itu secara otomatis akan membawa yang baru ke direktori kerja Anda.

Aramis NSR
sumber
0

Saya mengalami masalah ini karena saya menjalankan tugas menggunakan gradle global , dan bukan pembungkus gradle lokal saya .

yaitu di direktori saya saat ini, saya memiliki gradlewfile yang dapat dieksekusi.

Tapi saya menjalankan perintah ini:

gradle <task>

Kapan saya seharusnya berlari:

./gradlew <task>

Agaknya karena menjalankan gradle global mencoba membuat pembungkus lokal - dan pembungkus sudah ada.

Seb Charrot
sumber