Impossibile trovare il metodo leftShift () per gli argomenti dopo l'aggiornamento di studio 3.4


98

Dopo aver aggiornato la 3.4versione di Studio e Gradle a 5.1.1ho ricevuto l'errore sul mio compito come Impossibile trovare il metodo leftShift ()

Il mio compito:

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

Ho ricevuto l'errore per l'operatore di spostamento a sinistra <<nella riga.

Come risolvere questo errore?


3
<< è stato deprecato in 4.x e rimosso in 5.0
aashima

Ricevo lo stesso errore 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.. Non sto arrivando dove effettivamente devo cambiare.
Ajay Mehta

nel tuo build.gradle controlla per qualsiasi attività che hai creato
Bhuvanesh BS

Risposte:


199

Per risolvere questo errore, cambia <<con in doLastquesto modo.

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

L'operatore shitf sinistro rappresenta doLast { }.

<< è stato deprecato in Gradle 4.xe rimosso in Gradle 5.0

Da Documenti:

<<per le definizioni delle attività non funziona più. In altre parole, non è possibile utilizzare la sintassi

task myTask << { …​ }.

Usa Task.doLast()invece il metodo, in questo modo:

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

Maggiori informazioni qui: 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
dov'è questo? quale file?
Akanshi Srivastava

1
in build.gradle
Bhuvanesh BS

@ BhuvaneshBS Dove stampa?
Bharath Kumar

In Terminal durante l'esecuzione
dell'attività

1
Non ho alcun compito o << devo ancora affrontare il problema, qualcuno può aiutare?
Deepak Rajput

25

L' LeftShift()operatore << ( ) è deprecato nella versione 4.x Gradlee rimosso nella Gradleversione 5.x.

Per la soluzione di Could not find method leftShift() for arguments on task of type org.gradle.api.DefaultTask

Basta rimuovere "<<" da Task e aggiungere il metodo doLast{}

Riferimento 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
}

per

task incrementBetaVersion {
   doLast {
      // your code
    }
}

9

Ciò accade a causa dell'operatore Shift sinistro è stato sostituito da doLast {}.

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

Ora dovrai cambiare il codice:

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

per

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

5

Risolvere questo errore è piuttosto semplice.

Basta sostituire <<condoLast

Vedi sotto il codice aggiornato, oggi lo aggiusto nel mio progetto Android cordova.

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

Ho riscontrato questo errore in un progetto Kotlin che utilizza MockMakerper simulare classi non finali.

La soluzione è cambiare la vecchia sintassi con questa nuova:

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

Nota che sono cambiate alcune cose, come l'inclusione del doLastblocco e la rimozione di <<dalla firma dell'attività. Per me adesso funziona. Spero che lo faccia anche per te :-)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.