更新工作室 3.4 后找不到参数的 leftShift() 方法

Posted

技术标签:

【中文标题】更新工作室 3.4 后找不到参数的 leftShift() 方法【英文标题】:Could not find method leftShift() for arguments after updating studio 3.4 【发布时间】:2019-09-11 13:39:52 【问题描述】:

在将工作室 3.4 和 Gradle 版本更新为 5.1.1 后,我的任务出现错误 找不到方法 leftShift()

我的任务:

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

我在该行中得到了左移位运算符&lt;&lt; 的错误。

如何解决这个错误?

【问题讨论】:

我遇到了同样的错误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 中检查你创建的任何任务 【参考方案1】:

要解决此错误,请将&lt;&lt; 更改为doLast,如下所示。

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

左移运算符代表doLast

&lt;&lt; 在 Gradle 4.x 中被弃用并在 Gradle 5.0 中被移除

来自文档:

&lt;&lt; 用于任务定义不再有效。换句话说,你不能使用语法

task myTask &lt;&lt; …​ .

改用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

【讨论】:

这是哪里?哪个文件? 在 build.gradle 中 @BhuvaneshBS 它在哪里打印? 我没有任何任务或 @DeepakRajput 你找到解决方案了吗?我有同样的问题【参考方案2】:

只需从任务中删除“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 中已弃用,在 5.x Gradle 版本中已删除。

【讨论】:

【参考方案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】:

解决这个错误很简单。

只需将&lt;&lt; 替换为doLast

请参阅下面更新的代码,今天我在我的 cordova Android 项目中进行了修复。

task cdvPrintProps 
   doLast 
       //your code
   

【讨论】:

【参考方案5】:

我在使用MockMaker 模拟非最终类的 Kotlin 项目中遇到此错误。

解决方案是将旧语法更改为新语法:

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 块,以及从任务签名中删除 &lt;&lt;。它现在对我有用。希望它也适合你:-)

【讨论】:

以上是关于更新工作室 3.4 后找不到参数的 leftShift() 方法的主要内容,如果未能解决你的问题,请参考以下文章

百胜更新后找不到食谱

警告:更新到 xcode 7 后找不到选项的目录

更新到 nextjs@10.4 后找不到模块'webpack/lib/node/NodeTemplatePlugin'

Ionic 2:更新到 RC.0 后找不到名称“Promise”

[Bug]:版本更新后找不到模块“@ngrx/effects/testing”

在 React Native 0.62 更新后找不到 -lBranch 的库