Java Gradle-使用以闭包为参数的插件方法时出现语法错误
下面是Java Gradle-使用以闭包为参数的插件方法时出现语法错误,java,gradle,groovy,build.gradle,Java,Gradle,Groovy,Build.gradle,下面是build.gradle中的两个任务hello和printProperties: task('hello', { description("Hey student! Run this one :D") group("Our demo") doLast({println("Hello World!")}) } ) plugins({ id('java') }) ext({
build.gradle
中的两个任务hello
和printProperties
:
task('hello', {
description("Hey student! Run this one :D")
group("Our demo")
doLast({println("Hello World!")})
}
)
plugins({
id('java')
})
ext({
springVersion = "3.1.0.RELEASE"
emailNotification = "build@master.org"
})
sourceSets.all({ ext.purpose = null })
sourceSets({
main({
purpose = "production"
})
test({
purpose = "test"
})
plugin({
purpose = "production"
})
})
task('printProperties', {
doLast({
println(springVersion)
println(emailNotification)
sourceSets.matching({ it.purpose == "production" }.each({ println it.name }))
})
})
这就产生了错误:
> startup failed:
build file '/../../build.gradle': 8:
only buildscript {} and other plugins {} script blocks are allowed before plugins {} blocks, no other statements are allowed
为什么
插件({id('java')})
会给出groovy脚本语法错误 答案如下:
每当您编写build.gradle脚本并使用新插件时
脚本块,您需要将其作为文件中的第一个块。唯一的
此规则的例外情况是其他插件块或特殊插件
buildScript块,它始终必须先执行
在插件块之后定义任务?@tim_yates开发人员为什么使用声明性语法?它不可读…我无法理解带有声明性语法的一行groovy代码。真的很痛。你已经解决了上面的错误。我不明白你在说什么,我想他说的是,他发现删除了paren和逗号的gradle dsl很难阅读(与包含它们的问题相比)。IMHO这是你花在DSL上的时间的函数。当你刚开始的时候,你需要所有的逗号和括号。一旦你使用它几年了,我必须在心里解析的信息内容越不重要、越不重要越好。我也是一名clojure程序员。在clojure,每个人都开始憎恨帕伦一家。五年后,我没有听说有一个人不喜欢他们。就我的2c。@Matiasbjarand花时间使用DSL与远离遵循另一种语法的常规编程语言(C/Python/java/GoLang/TyoeScript)是一样的,这种语法看起来有点接近groovy的脚本语法。