Impossible de trouver la méthode leftShift () pour les arguments après la mise à jour de studio 3.4


97

Après la mise à jour de la 3.4version studio et Gradle vers, 5.1.1j'ai eu l'erreur sur ma tâche car impossible de trouver la méthode leftShift ()

Ma tâche:

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

J'ai eu l'erreur pour l'opérateur de décalage gauche <<dans la ligne.

Comment résoudre cette erreur?


3
<< est obsolète dans la version 4.x et supprimée dans la version 5.0
aashima

J'obtiens la même erreur 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.. Ne pas arriver là où je dois changer.
Ajay Mehta

dans vous build.gradle vérifiez pour toute tâche que vous avez créée
Bhuvanesh BS

Réponses:


197

Pour résoudre cette erreur, changez <<avec doLastcomme ça.

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

L'opérateur shitf gauche représente celui doLast { }.

<< était obsolète dans Gradle 4.x et supprimée dans Gradle 5.0

À partir de Docs:

<<pour les définitions de tâches ne fonctionne plus. En d'autres termes, vous ne pouvez pas utiliser la syntaxe

task myTask << { …​ }.

Utilisez Task.doLast()plutôt la méthode, comme ceci:

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

Plus d'informations ici: 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
où est-ce? quel fichier?
Akanshi Srivastava

1
dans build.gradle
Bhuvanesh BS

@BhuvaneshBS Où est-il imprimé?
Bharath Kumar

Dans le terminal lors de l'exécution de la tâche
Bhuvanesh BS

1
Je n'ai aucune tâche ou << toujours confronté au problème, quelqu'un peut-il m'aider?
Deepak Rajput

25

L' LeftShift()opérateur << ( ) est obsolète dans 4.x Gradleet supprimé dans la Gradleversion 5.x.

Pour solution de Could not find method leftShift() for arguments on task of type org.gradle.api.DefaultTask

Supprimez simplement "<<" de la tâche et ajoutez une méthode dans doLast{}

Référence 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

Cela se produit à cause de l'opérateur Left Shift a été remplacé par doLast {}.

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

Maintenant, vous devrez changer le code:

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

Résoudre cette erreur est assez simple.

Remplacez simplement <<pardoLast

Voir ci-dessous le code mis à jour, je corrige aujourd'hui dans mon projet 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

J'ai eu cette erreur dans un projet Kotlin qui utilise MockMakerpour simuler des classes non finales.

La solution est de remplacer l'ancienne syntaxe par la nouvelle:

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

Notez que certaines choses ont changé, comme l'inclusion du doLastbloc et la suppression <<de la signature de la tâche. Ça marche pour moi maintenant. J'espère que ça va aussi pour vous :-)

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.