在Android Studio(可能是ANY)gradle文件中,以下代码有效:
task build {
}
一个小小的改变导致完全崩溃:
task build
{
}
之前已经出现过其他线程,但是在修复构建文件的上下文中。我的问题是为什么不能用gradle / groovy来处理任何支撑风格?许多其他语言都可以很好地应对它,那么这里有什么重要意义呢?
答案 0 :(得分:4)
在错误消息中它实际上就可以了:
build file '.../build.gradle': 80: Ambiguous expression could be a parameterless closure expression, an isolated open code block, or it may continue a previous statement;
solution: Add an explicit parameter list, e.g. {it -> ...}, or force it to be treated as an open block by giving it a label, e.g. L:{...}, and also either remove the previous newline, or add an explicit semicolon ';' @ line 80, column 1.
由于Groovy语法糖使用lambda作为最后一个参数外观行语言构造的方法,以下代码块:
task build {}
task build2(type: Copy) {}
等于更常规的形式:
task build({})
task build(type: Copy, {})
现在,你真的不希望那里的那些花括号分隔常规代码块,而是一个Groovy lambda,它应该作为参数传递给build
方法。
然而从它的外观来看,Groovy无法确定它是否真的是一个lambda作为参数传递给前一行中的方法,或者当你在其间放置一个换行符时不相关的代码块。然后你去了,错误消息中描述的模棱两可,就在那里。
根据错误消息中的建议,您还可以使用以下语法而不是转义换行符的语法:
task build
{ ->
}
最后,用于调用动态方法的task
关键字(在您的示例中名为build
)不是特定于Groovy的,而是Gradle DSL功能。
答案 1 :(得分:2)
如果读到这篇文章的人都在想,那么解决方法很简单。
static_asserts
我只是想知道“为什么”......