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

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

Моя задача:

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

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

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

Ответ 1

Чтобы устранить эту ошибку, измените << с помощью 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

Более подробная информация здесь: https://discuss.gradle.org/t/could-not-find-method-leftshift-for-arguments-on-task-of-type-org-gradle-api-defaulttask/30614

Ответ 3

Это произошло из-за того, что оператор 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')
    }
}

Ответ 4

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