ไม่พบเมธอด leftShift () สำหรับอาร์กิวเมนต์หลังจากอัปเดต Studio 3.4


101

หลังจากอัปเดต3.4เวอร์ชันสตูดิโอและ Gradle เป็น5.1.1ฉันได้รับข้อผิดพลาดในงานของฉันเนื่องจากไม่พบวิธีการ leftShift ()

งานของฉัน:

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

ฉันได้รับข้อผิดพลาดสำหรับตัวดำเนินการกะด้านซ้าย<<ในบรรทัด

จะแก้ไขข้อผิดพลาดนี้ได้อย่างไร?


3
<< เลิกใช้แล้วใน 4.x และลบออกใน 5.0
aashima

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.ฉันได้รับข้อผิดพลาดเดียวกัน ไม่ได้ไปที่ที่ฉันต้องเปลี่ยนจริงๆ
Ajay Mehta

ในคุณ build.gradle ตรวจสอบงานใด ๆ ที่คุณสร้าง
Bhuvanesh BS

คำตอบ:


211

เพื่อแก้ปัญหาข้อผิดพลาดนี้การเปลี่ยนแปลง<<ด้วยdoLastเช่นนี้

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

doLast { }ผู้ประกอบการเปลี่ยนแปลงทางด้านซ้ายเป็นตัวแทนของ

<< เลิกใช้แล้วใน Gradle 4.x และลบออกใน Gradle 5.0

จากเอกสาร:

<<สำหรับนิยามงานใช้ไม่ได้อีกต่อไป กล่าวอีกนัยหนึ่งคุณไม่สามารถใช้ไวยากรณ์ได้

task myTask << { …​ }.

ใช้Task.doLast()วิธีนี้แทนดังนี้:

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

ข้อมูลเพิ่มเติมที่นี่: 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
ที่นี่ที่ไหน? ไฟล์ไหน?
Akanshi Srivastava

1
ใน build.gradle
Bhuvanesh BS

@BhuvaneshBS พิมพ์ที่ไหน?
Bharath Kumar

ใน Terminal ในขณะที่ทำงาน
Bhuvanesh BS

1
ฉันไม่มีงานหรือ << ยังคงประสบปัญหาใครสามารถช่วย?
Deepak Rajput

25

เพียงแค่ลบ "<<" ออกจากงานและเพิ่มรหัสของคุณใน doLast{}

สำหรับการแก้ปัญหาของ Could not find method leftShift() for arguments on task of type org.gradle.api.DefaultTask

task incrementBetaVersion << {
   // your code
}

ถึง

task incrementBetaVersion {
   doLast {
      // your code
    }
}

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

<< ( LeftShift()) โอเปอเรเตอร์เลิกใช้งานใน 4.x GradleและลบออกในGradleเวอร์ชัน5.x


9

เหตุการณ์นี้เกิดขึ้นเนื่องจากตัวดำเนินการ Shift ด้านซ้ายถูกแทนที่ด้วย doLast {}

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

ตอนนี้คุณจะต้องเปลี่ยนรหัส:

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

ถึง

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

5

ในการแก้ไขข้อผิดพลาดนี้ค่อนข้างง่าย

เพียงแค่แทนที่<<ด้วยdoLast

ดูโค้ดที่อัปเดตด้านล่างวันนี้ฉันแก้ไขในโครงการ Cordova Android ของฉัน

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

ฉันพบข้อผิดพลาดนี้ในโปรเจ็กต์ Kotlin ที่ใช้MockMakerเพื่อล้อเลียนคลาสที่ไม่ใช่คลาสสุดท้าย

วิธีแก้ไขคือเปลี่ยนไวยากรณ์เก่าเป็นไวยากรณ์ใหม่:

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

โปรดทราบว่ามีการเปลี่ยนแปลงบางอย่างเช่นการรวมdoLastบล็อกและการลบออก<<จากลายเซ็นงาน ตอนนี้ใช้ได้กับฉันแล้ว หวังว่ามันจะเหมาะกับคุณเช่นกัน :-)

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