我是Gradle和Groovy的新手,并且在定义gradle任务时试图了解groovy级别的情况.
task hello {
println "configuring task hello"
doLast {
println "hello there"
}
}
Run Code Online (Sandbox Code Playgroud)
通过阅读"Gradle In Action"一书,我知道这task hello {}是task()对groovy Project界面方法的真正调用.在页77上,它显示在Project接口上有4个称为任务的方法
task(args: Map<String,?>, name:String)
task(args: Map<String,?>, name:String, c:Closure)
task(name: String)
task(name: String, c:Closure)
Run Code Online (Sandbox Code Playgroud)
我明白这{}是封闭体.
我不明白的是hello,task hello { }根据/sf/answers/1791486581/,groovy如何解释有一个groovy编译器插件转换task hello { }成task('hello', { })
我的问题:
在哪里可以找到有关转换的Gradle Groovy编译器插件的信息?
是否Gradle脚本是groovy程序在技术上是不正确的,因为gradle以某种方式扩展了Groovy编程语言?
有没有办法让gradle命令打印出编译器插件运行后生成的基本groovy代码?
我不明白为什么当我们声明它时,我们不需要为gradle任务的名称添加引号:
task hello (type : DefaultTask) {
}
Run Code Online (Sandbox Code Playgroud)
我试过一个时髦的项目,发现它是非法的,gradle是如何工作的.而且我不理解上面的表达式,为什么我们可以添加(type : DefaultTask),我们如何用groovy语法分析它?
作为Gradle和Groovy的新手,我发现自己很难理解build.gradle脚本的语法.
我理解(至少我认为是这样)build.gradle是用作DSL的普通groovy代码,其中关键字在别处定义.
请解释一下不同的部分.摘自教程:
defaultTasks 'distribution'
task distribution << {
println "We build the zip with version=$version"
}
task release(dependsOn: 'distribution') << {
println 'We release now'
}
gradle.taskGraph.whenReady {taskGraph ->
if (taskGraph.hasTask(release)) {
version = '1.0'
} else {
version = '1.0-SNAPSHOT'
}
}
Run Code Online (Sandbox Code Playgroud)
我想我知道println是一个功能.我知道引号中的文字是一个字符串.我想花括号中的东西是封闭的.但什么是发布/*发行*?它也是一个字符串吗?它是函数任务的参数吗?为什么我可以在hasTask(release)中使用它而不带引号?
那么exacly 是什么:'defaultTasks','task','release','<<','gradle','whenReady',' - >'?
额外奖励:有没有一种常规方法可以找到自己?