Nie można znaleźć metody leftShift () dla argumentów po aktualizacji Studio 3.4

101

Po zaktualizowaniu 3.4wersji Studio i Gradle do 5.1.1mojego zadania wystąpił błąd, ponieważ nie można znaleźć metody leftShift ()

Moje zadanie:

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

Mam błąd dla lewego operatora zmiany <<w linii.

Jak rozwiązać ten błąd?

Bhuvanesh BS
źródło
3
<< został wycofany w wersji 4.x i usunięty w wersji 5.0
aashima
Otrzymuję ten sam błąd 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.. Nie docieram tam, gdzie właściwie muszę się zmienić.
Ajay Mehta
in you build.gradle sprawdź dla każdego utworzonego zadania
Bhuvanesh BS

Odpowiedzi:

212

Aby rozwiązać ten błąd, zmień <<w doLastten sposób.

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

Lewy operator zmiany reprezentuje doLast { }.

<< został wycofany w Gradle 4.xi usunięty w Gradle 5.0

Z Dokumentów:

<<dla definicji zadań już nie działa. Innymi słowy, nie możesz używać składni

task myTask << { …​ }.

Task.doLast()Zamiast tego użyj metody, na przykład:

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

Więcej informacji tutaj: 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
źródło
2
gdzie to jest? który plik?
Akanshi Srivastava
1
w build.gradle
Bhuvanesh BS
@BhuvaneshBS Gdzie to drukuje?
Bharath Kumar,
W Terminalu podczas wykonywania zadania
Bhuvanesh BS
1
Nie mam żadnego zadania lub << wciąż mam problem, czy ktoś może pomóc?
Deepak Rajput
25

Po prostu usuń „<<” z zadania i dodaj swój kod w doLast{}

Do rozwiązania Could not find method leftShift() for arguments on task of type org.gradle.api.DefaultTask

task incrementBetaVersion << {
   // your code
}

do

task incrementBetaVersion {
   doLast {
      // your code
    }
}

Źródła https://discuss.gradle.org/t/could-not-find-method-leftshift-for-arguments-on-task-of-type-org-gradle-api-defaulttask/30614/2

LeftShift()Operator << ( ) jest przestarzały w 4.xi Gradleusunięty w 5.x Gradlewersji.

Nikunj Paradva
źródło
9

Dzieje się tak, ponieważ lewy Shift został zastąpiony przez doLast {}.

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

Teraz będziesz musiał zmienić kod:

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

do

task incrementBetaVersion  {
    doLast {
        println("Incrementing Beta Version Number...")
        incrementVersionNumber('BetaVersionNumber')
        println("Incrementing Beta Version Number...")
        incrementVersionName('BetaVersionName')
    }
}
naveenos
źródło
5

Rozwiązanie tego błędu jest dość proste.

Wystarczy wymienić <<zdoLast

Zobacz poniżej zaktualizowany kod, dziś naprawię w moim projekcie cordova na Androida.

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
źródło
2

Wystąpił ten błąd w projekcie Kotlin używanym MockMakerdo wyszydzania klas innych niż końcowe.

Rozwiązaniem jest zmiana starej składni na nową:

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

Zwróć uwagę, że zmieniło się kilka rzeczy, na przykład włączenie doLastbloku i usunięcie <<z podpisu zadania. Teraz mi to pasuje. Mam nadzieję, że dla Ciebie to również :-)

voghDev
źródło