Не удалось найти метод leftShift () для аргументов после обновления Studio 3.4

101

После обновления 3.4версии Studio и Gradle до 5.1.1моей задачи возникла ошибка: не удалось найти метод leftShift ()

Моя задача:

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

Я получил ошибку для оператора сдвига влево <<в строке.

Как устранить эту ошибку?

Бхуванеш Б.С.
источник
3
<< устарело в 4.x и удалено в 5.0
aashima
Я получаю ту же ошибку 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
в вашем build.gradle проверьте любую созданную вами задачу
Bhuvanesh BS

Ответы:

211

Для решения этой ошибки, изменения <<с 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
где это? какой файл?
Аканши Шривастава
1
in build.gradle
BS
@BhuvaneshBS Где печатает?
Bharath Kumar
В Терминале при выполнении задачи
Бхуванеш Б.С.
1
У меня нет задачи или << все еще сталкиваюсь с проблемой, может ли кто-нибудь помочь?
Дипак Раджпут
25

Просто удалите «<<» из задачи и добавьте свой код в doLast{}

Для решения Could not find method leftShift() for arguments on task of type org.gradle.api.DefaultTask

task incrementBetaVersion << {
   // your code
}

к

task incrementBetaVersion {
   doLast {
      // your code
    }
}

Ссылка https://discuss.gradle.org/t/could-not-find-method-leftshift-for-arguments-on-task-of-type-org-gradle-api-defaulttask/30614/2

LeftShift()Оператор << ( ) устарел в 4.x Gradleи удален в Gradleверсии 5.x.

Никундж Парадва
источник
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)
       }
   }
}
Муддасир23
источник
2

У меня была эта ошибка в проекте Kotlin, который используется MockMakerдля имитации не финальных классов.

Решение состоит в том, чтобы изменить старый синтаксис на новый:

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блока и удаление <<из подписи задачи. У меня это работает сейчас. Надеюсь, вам тоже понравится :-)

voghDev
источник