Não foi possível encontrar o método leftShift () para argumentos após atualizar o Studio 3.4

97

Depois de atualizar a 3.4versão do Studio e do Gradle para 5.1.1, recebi o erro em minha tarefa como Não foi possível encontrar o método leftShift ()

Minha tarefa:

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

Recebi o erro do operador do turno esquerdo <<na linha.

Como resolver esse erro?

Bhuvanesh BS
fonte
3
<< foi descontinuado no 4.x e removido no 5.0
aashima
Estou recebendo o mesmo erro 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.. Não estou chegando onde realmente tenho que mudar.
Ajay Mehta de
em sua verificação build.gradle para qualquer tarefa que você criou
Bhuvanesh BS

Respostas:

195

Para resolver este erro, mude <<com doLastassim.

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

Operador shitf esquerdo representa doLast { }.

<< foi suspenso no Gradle 4.x e removido no Gradle 5.0

Do Docs:

<<para definições de tarefas não funciona mais. Em outras palavras, você não pode usar a sintaxe

task myTask << { …​ }.

Use o Task.doLast()método, como este:

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

Mais informações aqui: 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

Bhuvanesh BS
fonte
2
onde é isso? qual arquivo?
Akanshi Srivastava de
1
em build.gradle
Bhuvanesh BS
@BhuvaneshBS Onde está impresso?
Bharath Kumar
No Terminal durante a execução da tarefa
Bhuvanesh BS
1
Não tenho nenhuma tarefa ou << ainda estou enfrentando o problema, alguém pode ajudar?
Deepak Rajput
25

O LeftShift()operador << ( ) foi descontinuado na versão 4.x Gradlee removido na Gradleversão 5.x.

Para solução de Could not find method leftShift() for arguments on task of type org.gradle.api.DefaultTask

Basta remover "<<" da tarefa e adicionar o método em doLast{}

Referência 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
}

para

task incrementBetaVersion {
   doLast {
      // your code
    }
}
Nikunj Paradva
fonte
9

Isso aconteceu porque o operador Left Shift foi substituído por doLast {}.

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

Agora você terá que alterar o código:

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

para

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

Resolver esse erro é bem simples.

Basta substituir <<pordoLast

Veja abaixo o código atualizado, hoje conserto no meu projeto 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)
       }
   }
}
Muddasir23
fonte
2

Eu tive este erro em um projeto Kotlin que está usando MockMakerpara simular classes não finais.

A solução é mudar a sintaxe antiga para esta nova:

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

Observe que algumas coisas mudaram, como incluir o doLastbloco e remover o <<da assinatura da tarefa. Trabalha para mim agora. Espero que funcione para você também :-)

voghDev
fonte