更新Studio 3.4后,无法为自变量找到方法leftShift()


97

将Studio 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中检查是否已创建任何任务
Bhuvanesh BS

Answers:


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
这是哪里 哪个文件?
Akanshi Srivastava

1
在build.gradle
Bhuvanesh BS

@BhuvaneshBS在哪里打印?
巴拉斯·库玛

在终端执行任务时
Bhuvanesh BS

1
我没有任何任务,或者<<仍然面临问题,任何人都可以帮忙吗?
Deepak Rajput

25

<<(LeftShift())运算符在4.x中已弃用,Gradle在5.x Gradle版本中已删除。

用于解决 Could not find method leftShift() for arguments on task of type org.gradle.api.DefaultTask

只需从Task中删除“ <<”并在其中添加方法 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

发生这种情况的原因是,左移运算符已被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块,以及<<从任务签名中删除。现在对我有用。希望它也对您有用:-)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.