Не вдалося знайти метод leftShift () для аргументів після оновлення студії 3.4


97

Після оновлення 3.4версії студії та 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.. Не потрапляючи туди, де насправді я повинен змінитися.
Аджай Мехта,

у вас build.gradle перевіряє будь-яке створене вами завдання
Бхуванеш Б.С.,

Відповіді:


198

Для вирішення цієї помилки, зміни <<з doLastтакими.

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

Лівий оператор shitf представляє 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
в build.gradle
Bhuvanesh BS

@BhuvaneshBS Де друкується?
Бхарат Кумар,

У Терміналі під час виконання завдання
Бхуванеш Б.С.

1
У мене немає жодного завдання або << все ще стикається з проблемою, чи може хтось допомогти?
Діпак Раджпут

25

LeftShift()Оператор << ( ) застарілий у версії 4.x Gradleта вилучений у Gradleверсії 5.x.

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

Просто видаліть "<<" із Завдання та додайте метод у doLast{}

Посилання 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

Це відбувається через оператора 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)
       }
   }
}

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блоку та видалення <<з підпису завдання. Зараз у мене це працює. Сподіваюся, це стосується і вас :-)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.