Tidak dapat menemukan metode leftShift () untuk argumen setelah memperbarui studio 3.4


101

Setelah memperbarui 3.4versi studio dan Gradle ke 5.1.1saya mendapat kesalahan pada tugas saya karena Tidak dapat menemukan metode leftShift ()

Tugasku:

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

Saya mendapat kesalahan untuk operator shift kiri <<di telepon.

Bagaimana cara mengatasi kesalahan ini?


3
<< tidak digunakan lagi dalam 4.x dan dihapus pada 5.0
aashima

Saya mendapatkan kesalahan yang sama 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.. Tidak sampai dimana sebenarnya saya harus berubah.
Ajay Mehta

di build.gradle Anda, periksa tugas apa pun yang telah Anda buat
Bhuvanesh BS

Jawaban:


211

Untuk mengatasi kesalahan ini, ganti <<dengan doLastseperti ini.

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

Mewakili operator shift kiri doLast { }.

<< tidak digunakan lagi di Gradle 4.x dan dihapus di Gradle 5.0

Dari Dokumen:

<<untuk definisi tugas tidak lagi berfungsi. Dengan kata lain, Anda tidak dapat menggunakan sintaks

task myTask << { …​ }.

Gunakan Task.doLast()metode sebagai gantinya, seperti ini:

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

Info lebih lanjut di sini: 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
dimana ini? file yang mana?
Akanshi Srivastava

1
di build.gradle
Bhuvanesh BS

@BhuvaneshBS Dimana cetakannya?
Bharath Kumar

Di Terminal saat menjalankan tugas
Bhuvanesh BS

1
Saya tidak punya tugas atau << masih menghadapi masalah ini, ada yang bisa membantu?
Deepak Rajput

25

Hapus saja "<<" dari Tugas dan tambahkan kode Anda doLast{}

Untuk solusi Could not find method leftShift() for arguments on task of type org.gradle.api.DefaultTask

task incrementBetaVersion << {
   // your code
}

untuk

task incrementBetaVersion {
   doLast {
      // your code
    }
}

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

Operator << ( LeftShift()) tidak digunakan lagi di 4.x Gradledan Dihapus di 5.xGradle Versi


9

Ini terjadi karena operator Shift Kiri telah digantikan oleh doLast {}.

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

Sekarang Anda harus mengubah kode:

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

untuk

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

5

Untuk mengatasi kesalahan ini cukup sederhana.

Ganti saja <<dengandoLast

Lihat kode yang diperbarui di bawah ini, hari ini saya perbaiki di proyek Cordova Android saya.

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

Saya mengalami kesalahan ini dalam proyek Kotlin yang digunakan MockMakeruntuk memalsukan kelas non final.

Solusinya adalah mengubah sintaks lama ke yang baru ini:

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")
        }
    }
}

Perhatikan bahwa beberapa hal telah berubah, seperti menyertakan doLastblok, dan menghapus <<dari tanda tangan tugas. Ini bekerja untuk saya sekarang. Semoga bermanfaat juga untuk Anda :-)

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.