在升级了Android Studio 3.4之后,找不到leftShift()方法。

151

在将Android Studio升级到3.4和Gradle版本升级到5.1.1之后,我的任务出现了错误,错误为Could not find method leftShift()

我的任务:

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

我在这行代码中使用了左移运算符<<,但是出现了错误。

该如何解决这个错误?


6
<< was deprecated in 4.x and removed in 5.0 的翻译是:"<<在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
5个回答

283
为了解决这个错误,请将 << 改为 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 在此处查看如何升级 Gradle 版本至 5.0: https://docs.gradle.org/current/userguide/upgrading_version_4.html#changes_5.0

3
这是哪里?哪个文件? - Akanshi Srivastava
1
in build.gradle - Bhuvanesh BS
3
我没有任何任务或者仍然面临问题,有人可以帮忙吗? - Deepak Rajput
1
@DeepakRajput,你找到解决方案了吗?我也有同样的问题。 - Muhammad Zahab
Gradle正在接受以下代码:task incrementBetaVersion doLast { .... }这与以下代码相同吗?task incrementBetaVersion { doLast { .... } } - Andz
显示剩余2条评论

45

只需从任务中删除“<<”,并在doLast{}中添加您的代码

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

task incrementBetaVersion << {
   // your code
}

to

task incrementBetaVersion {
   doLast {
      // your code
    }
}

"(LeftShift())运算符在4.x的Gradle版本中被弃用,并且在5.x的Gradle版本中已被移除。有关更多信息,请参考此处。"

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')
}

to

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

9
要解决这个错误非常简单。只需要用doLast替换<<即可。
下面是我在我的cordova Android项目中修复后的更新代码。
task cdvPrintProps {
   doLast {
       //your code
   }
}

2

我在一个使用MockMaker来模拟非final类的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块,并从任务签名中删除<<。现在它对我有用了。希望对你也有用 :-)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接