Studio 3.4를 업데이트 한 후 인수에 대한 leftShift () 메서드를 찾을 수 없습니다.


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에서 더 이상 사용되지
않고

같은 오류가 발생 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 19

당신은 당신이 만든 모든 작업을 확인 build.gradle에
Bhuvanesh BS

답변:


210

이 오류를 해결하려면 다음 <<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 19.06.24

1
build.gradle
Bhuvanesh BS

@BhuvaneshBS 어디에서 인쇄합니까?
바라 스 쿠마

작업을 실행하는 동안 터미널에서
Bhuvanesh BS

1
나는 작업이 없거나 << 여전히 문제에 직면하여 누구든지 도울 수 있습니까?
Deepak Rajput 19 년

25

<< ( LeftShift()) 연산자는 4.x에서 더 이상 사용되지 않으며 Gradle5.x Gradle버전 에서 제거되었습니다 .

솔루션 Could not find method leftShift() for arguments on task of type org.gradle.api.DefaultTask

작업에서 "<<"를 제거하고 메서드를 추가하십시오. doLast{}

참조 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
}

...에

task incrementBetaVersion {
   doLast {
      // your code
    }
}

9

Left 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

MockMaker최종 클래스가 아닌 클래스를 모의 하는 데 사용하는 Kotlin 프로젝트에서이 오류가 발생했습니다 .

해결책은 이전 구문을 새 구문으로 변경하는 것입니다.

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.