Không thể tìm thấy phương thức leftShift () cho các đối số sau khi cập nhật studio 3.4


97

Sau khi cập nhật 3.4phiên bản studio và Gradle lên, 5.1.1tôi đã gặp lỗi trong tác vụ của mình là Không thể tìm thấy phương thức leftShift ()

Việc của tôi:

task incrementBetaVersion << {
    println("Incrementing Beta Version Number...")
    incrementVersionNumber('BetaVersionNumber')
    println("Incrementing Beta Version Number...")
    incrementVersionName('BetaVersionName')
}

Tôi đã gặp lỗi đối với toán tử dịch trái <<trong dòng.

Làm thế nào để giải quyết lỗi này?


3
<< không được dùng nữa trong 4.x và bị xóa trong 5.0
aashima

Tôi đang nhận được cùng một lỗi ERROR: Could not find method leftShift() for arguments [android_release_aar_8aaffqenud6qsg8w8hrovmfvc$_run_closure7@23b31b41] on task ':XXXapi:generateRelease' of type org.gradle.api.DefaultTask.. Không đạt được nơi thực sự tôi phải thay đổi.
Ajay Mehta

trong bạn build.gradle kiểm tra đối với bất kỳ công việc bạn đã tạo ra
Bhuvanesh BS

Câu trả lời:


198

Để giải quyết lỗi này, hãy thay đổi <<bằng doLastnhư thế này.

task incrementBetaVersion  {
    doLast {
        println("Incrementing Beta Version Number...")
        incrementVersionNumber('BetaVersionNumber')
        println("Incrementing Beta Version Number...")
        incrementVersionName('BetaVersionName')
    }
}

Đại diện của toán tử shitf trái doLast { }.

<< không được dùng nữa trong Gradle 4.x và bị xóa trong Gradle 5.0

Từ Tài liệu:

<<đối với các định nghĩa nhiệm vụ không còn hoạt động. Nói cách khác, bạn không thể sử dụng cú pháp

task myTask << { …​ }.

Sử dụng Task.doLast()phương pháp thay thế, như thế này:

task myTask {
    doLast {
        ...
        ...
    }
}

Thông tin thêm tại đây: https://discuss.gradle.org/t/could-not-find-method-leftshift-for-arguments-on-task-of-type-org-gradle-api-defaulttask/30614

https://docs.gradle.org/current/userguide/upgrading_version_4.html#changes_5.0


2
đây là đâu? tập tin nào?
Akanshi Srivastava

1
trong build.gradle
Bhuvanesh BS

@BhuvaneshBS Nó in ở đâu?
Bharath Kumar,

Trong nhà ga trong khi chạy các nhiệm vụ
Bhuvanesh BS

1
Tôi không có bất kỳ nhiệm vụ nào hoặc << vẫn đang đối mặt với vấn đề này, bất cứ ai có thể giúp đỡ?
Deepak Rajput

25

LeftShift()Toán tử << ( ) không được dùng nữa trong 4.x Gradlevà Đã bị loại bỏ trong GradlePhiên bản 5.x.

Đối với giải pháp của Could not find method leftShift() for arguments on task of type org.gradle.api.DefaultTask

Chỉ cần Xóa "<<" khỏi Tác vụ và thêm phương thức vào doLast{}

Tham khảo https://discuss.gradle.org/t/could-not-find-method-leftshift-for-arguments-on-task-of-type-org-gradle-api-defaulttask/30614/2

task incrementBetaVersion << {
   // your code
}

đến

task incrementBetaVersion {
   doLast {
      // your code
    }
}

9

Điều này xảy ra do toán tử Left Shift đã được thay thế bằng doLast {}.

<< has deprecated in 4.x and removed in 5.0 version

Bây giờ bạn sẽ phải thay đổi mã:

task incrementBetaVersion << {
    println("Incrementing Beta Version Number...")
    incrementVersionNumber('BetaVersionNumber')
    println("Incrementing Beta Version Number...")
    incrementVersionName('BetaVersionName')
}

đến

task incrementBetaVersion  {
    doLast {
        println("Incrementing Beta Version Number...")
        incrementVersionNumber('BetaVersionNumber')
        println("Incrementing Beta Version Number...")
        incrementVersionName('BetaVersionName')
    }
}

5

Để giải quyết lỗi này là khá đơn giản.

Chỉ cần thay thế <<bằngdoLast

Xem mã cập nhật bên dưới, hôm nay tôi sửa chữa trong dự án Android cordova của mình.

task cdvPrintProps {
   doLast {
       println('cdvCompileSdkVersion=' + cdvCompileSdkVersion)
       println('cdvBuildToolsVersion=' + cdvBuildToolsVersion)
       println('cdvVersionCode=' + cdvVersionCode)
       println('cdvVersionCodeForceAbiDigit=' + cdvVersionCodeForceAbiDigit)
       println('cdvMinSdkVersion=' + cdvMinSdkVersion)
       println('cdvBuildMultipleApks=' + cdvBuildMultipleApks)
       println('cdvReleaseSigningPropertiesFile=' + cdvReleaseSigningPropertiesFile)
       println('cdvDebugSigningPropertiesFile=' + cdvDebugSigningPropertiesFile)
       println('cdvBuildArch=' + cdvBuildArch)
       println('computedVersionCode=' + android.defaultConfig.versionCode)
       android.productFlavors.each { flavor ->
           println('computed' + flavor.name.capitalize() + 'VersionCode=' + flavor.versionCode)
       }
   }
}

2

Tôi đã gặp lỗi này trong một dự án Kotlin đang sử dụng MockMakerđể mô phỏng các lớp không phải là lớp cuối cùng.

Giải pháp là thay đổi cú pháp cũ thành cú pháp mới này:

task createTestResources {
    description = "Allows Mocking non-final classes and data classes in a Kotlin project"
    doLast {
        def mockMakerFile = new File("$projectDir/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker")
        if (System.env.MOCK_MAKER != null) {
            logger.info("Using MockMaker ${System.env.MOCK_MAKER}")
            mockMakerFile.parentFile.mkdirs()
            mockMakerFile.createNewFile()
            mockMakerFile.write(System.env.MOCK_MAKER)
        } else {
            logger.info("Using default MockMaker")
        }
    }
}

Lưu ý rằng một số thứ đã thay đổi, chẳng hạn như bao gồm doLastkhối và xóa <<khỏi chữ ký tác vụ. Nó làm việc cho tôi bây giờ. Hy vọng nó cũng làm cho bạn :-)

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.