Không thể thêm 'trình bao bọc' nhiệm vụ vì một nhiệm vụ có tên đó đã tồn tại


112

Khi cài đặt 'react-native init AwesomeProject', tôi gặp lỗi này khi chạy react-native run-android:

Could not determine java version from '11.0.1'.

Google nhanh chóng gợi ý rằng tôi cần cập nhật distributionUrltrong Gradle-wrapper. Sau khi làm điều này, tôi phải đối mặt với một lỗi mới:

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

Nó cho thấy vấn đề nằm trong tệp:

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

trông như thế này

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

Tôi đã cố gắng tìm hiểu xem điều này có tác dụng gì. Có vẻ kỳ lạ là một cái gì đó sẽ không hoạt động ngay lập tức. Có ai đang gặp phải vấn đề tương tự không?


4
có bản cập nhật nào không hoặc câu trả lời nào là đúng? Nếu không thì bạn đã giải quyết nó như thế nào? khác đánh dấu vào biểu tượng bên phải trên một câu trả lời. >> :-)
ganeshdeshmukh Ngày

Câu trả lời:


160

Bạn cũng có thể cập nhật

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

đến

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

Như

Việc ghi đè các tác vụ tích hợp không còn được dùng trong 4.8 hiện tạo ra lỗi.

Cố gắng thay thế một tác vụ được tích hợp sẵn sẽ tạo ra lỗi tương tự như sau:

Không thể thêm tác vụ 'trình bao bọc' vì tác vụ có tên đó đã tồn tại.

xem đoạn cuối cùng của Nhiệm vụ & thuộc tính : https://docs.gradle.org/5.2.1/userguide/upgrading_version_4.html

Tùy chỉnh tác vụ Wrapper : https://docs.gradle.org/5.2.1/userguide/gradle_wrapper.html#customizing_wrapper


9
Câu trả lời này không trả lời câu hỏi thực sự của OP, nhưng nó rất hữu ích cho những người làm Google như tôi, vì vậy tôi đã ủng hộ.
Franklin Yu

Nó giải quyết được vấn đề của OP. Anh ta đang sử dụng một phiên bản Gradle cổ và sau đó buộc phải cập nhật bằng một giải pháp lỗi thời, và câu trả lời này cung cấp giải pháp chính xác. (Tất nhiên, @FranklinYu, nếu bạn lấy “có ai đang đối mặt với vấn đề tương tự không?” Làm câu hỏi của OP, thì chỉ cần một câu “có” đơn giản là đủ.)
Michael Piefel

91

bạn sử dụng phiên bản gradle nào trong môi trường của mình?

Nếu bạn sử dụng phiên bản gradle 5.x, bạn phải sửa đổi 「task wrapper」 như bên dưới.

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

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

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

Sau đó, lỗi này đã đến. Không thể tìm ra những gì phải làm. LỖI: Không thể tìm thấy phương thức wrapper () cho các đối số [{type = class org.gradle.api.tasks.wrapper.Wrapper}, build_81gq92nveejavsi3t9efznmk8 $ _run_closure2 @ 55f5bac8] trên dự án gốc 'myproject' của loại org.gradle.api.Project .
buddhiv

21

Như đã đề cập trong các nhận xét, hãy làm theo - https://stackoverflow.com/a/46867575/4982729 :

  1. Mở và chỉnh sửa tệp app-folder/android/gradle/wrapper/gradle-wrapper.properties; cập nhật dòng

    distributionUrl=https\://services.gradle.org/distributions/gradle-5.0-all.zip
  2. Trong hồ sơ, AwesomeProject/android/build.gradlehãy thử bình luận

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

12

nếu tệp "gradle-wrapper.properties" đã có các mã này

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

sau đó bạn có thể loại bỏ

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

từ build.gradle


1

Tôi có cùng một vấn đề. vấn đề trong mã của tôi là một khai báo kép trên một tệp Gradle khác trong build.gradle

build.gradle

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

0

Khả năng cao là bạn có "nhiệm vụ" để chạy trong tệp build.gradle của mình, hãy xóa dòng liên quan đến wrapper (bao gồm cả dấu ngoặc của nó, v.v.). Sau đó, nếu bạn đang sử dụng IntelliJ, nó sẽ tự động đưa cái mới vào thư mục làm việc của bạn.


0

Tôi gặp phải sự cố vì tôi đang chạy tác vụ của mình bằng cách sử dụng gradle toàn cục chứ không phải trình bao bọc gradle cục bộ của tôi .

tức là trong thư mục hiện tại của tôi, tôi đã có một gradlewtệp thực thi.

Nhưng tôi đang chạy lệnh này:

gradle <task>

Khi đáng lẽ tôi phải chạy:

./gradlew <task>

Có lẽ là vì chạy gradle toàn cục cố gắng tạo một trình bao bọc cục bộ - và một trình bao bọc đã tồn tại.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.