ไม่สามารถเพิ่มงาน "wrapper" เป็นงานที่มีชื่อนั้นอยู่แล้ว


112

เมื่อติดตั้ง'react-native init AwesomeProject'ฉันได้รับข้อผิดพลาดนี้เมื่อเรียกใช้react-native run-android:

Could not determine java version from '11.0.1'.

Google ด่วนแนะนำว่าฉันต้องอัปเดตdistributionUrlใน Gradle-wrapper หลังจากทำสิ่งนี้แล้วฉันพบกับข้อผิดพลาดใหม่:

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

แนะนำว่าปัญหาอยู่ในไฟล์:

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

ซึ่งมีลักษณะเช่นนี้

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

ฉันกลับไปกลับมาพยายามคิดว่าสิ่งนี้ทำอย่างไร ดูเหมือนจะแปลกที่มีบางอย่างไม่สามารถใช้งานได้ทันที มีใครประสบปัญหาคล้าย ๆ กันไหม


4
มีการอัปเดตหรือคำตอบที่ได้ผลหรือไม่ ถ้าไม่แล้วคุณแก้ไขอย่างไร อื่นติ๊กไอคอนขวาบนคำตอบ >> :-)
ganeshdeshmukh

คำตอบ:


160

คุณยังสามารถอัปเดต

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

ถึง

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

เช่น

การลบล้างงานในตัวที่เลิกใช้งานใน 4.8 จะก่อให้เกิดข้อผิดพลาด

การพยายามแทนที่งานในตัวจะทำให้เกิดข้อผิดพลาดคล้ายกับสิ่งต่อไปนี้:

ไม่สามารถเพิ่มงาน "wrapper" เป็นงานที่มีชื่อนั้นอยู่แล้ว

ดูย่อหน้าสุดท้ายของTasks & properties : https://docs.gradle.org/5.2.1/userguide/upgrading_version_4.html

และการปรับแต่งงาน Wrapper : https://docs.gradle.org/5.2.1/userguide/gradle_wrapper.html#customizing_wrapper


9
คำตอบนี้ไม่ได้ตอบคำถามที่แท้จริงของ OP แต่มีประโยชน์มากสำหรับ Googler อย่างฉันฉันจึงเพิ่มคะแนน
Franklin Yu

มันช่วยแก้ปัญหาของ OP เขาใช้ Gradle เวอร์ชันโบราณและเชื่อมโยงกับการอัปเดตโดยใช้โซลูชันที่ล้าสมัยและคำตอบนี้จะให้คำตอบที่ถูกต้อง (แน่นอนว่า @FranklinYu ถ้าคุณใช้“ มีใครประสบปัญหาคล้าย ๆ กันหรือไม่” เป็นคำถามของ OP คำตอบง่ายๆ“ ใช่” ก็เพียงพอแล้ว)
Michael Piefel

91

คุณใช้ gradle เวอร์ชันใดในสภาพแวดล้อมของคุณ

หากคุณใช้ gradle เวอร์ชัน 5.x คุณต้องแก้ไข「 task wrapper 」ดังต่อไปนี้

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

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

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

จากนั้นข้อผิดพลาดนี้ก็เกิดขึ้น คิดไม่ออกว่าจะทำอย่างไร ข้อผิดพลาด: ไม่พบ method wrapper () สำหรับอาร์กิวเมนต์ [{type = class org.gradle.api.tasks.wrapper.Wrapper}, build_81gq92nveejavsi3t9efznmk8 $ _run_closure2 @ 55f5bac8] ในรูทโปรเจ็กต์ 'myproject' ของประเภท org.gradle.api.Project .
buddhiv

21

ตามที่กล่าวไว้ในความคิดเห็นติดตาม - https://stackoverflow.com/a/46867575/4982729 :

  1. เปิดและแก้ไขไฟล์app-folder/android/gradle/wrapper/gradle-wrapper.properties; อัปเดตบรรทัด

    distributionUrl=https\://services.gradle.org/distributions/gradle-5.0-all.zip
  2. ในไฟล์AwesomeProject/android/build.gradleลองแสดงความคิดเห็น

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

12

หากไฟล์ "gradle-wrapper.properties" มีรหัสเหล่านี้อยู่แล้ว

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

จากนั้นคุณสามารถลบ

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

จาก build.gradle


1

ฉันมีปัญหาเดียวกัน ปัญหาในรหัสของฉันคือการประกาศสองครั้งในไฟล์ Gradle อื่นใน build.gradle

build.gradle

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

0

มีโอกาสสูงที่คุณจะมี "งาน" ที่จะเรียกใช้ในไฟล์ build.gradle ของคุณไปและลบบรรทัดที่เกี่ยวข้องกับ wrapper (รวมถึงวงเล็บและอื่น ๆ ) จากนั้นหากคุณใช้ IntelliJ ระบบจะนำรายการใหม่ไปยังไดเรกทอรีการทำงานของคุณโดยอัตโนมัติ


0

ฉันวิ่งเข้าไปในปัญหาเพราะผมถูกเรียกใช้งานของฉันใช้ทั่วโลก gradle และไม่ฉันท้องถิ่นเสื้อคลุม gradle

กล่าวคือในไดเร็กทอรีปัจจุบันของฉันฉันมีgradlewไฟล์ปฏิบัติการ

แต่ฉันกำลังเรียกใช้คำสั่งนี้:

gradle <task>

เมื่อฉันควรจะวิ่ง:

./gradlew <task>

น่าจะเป็นเพราะการรัน global gradle พยายามสร้าง local wrapper - และมีอยู่แล้ว

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.