当 Gradle 执行一个脚本时,它将脚本编译为一个实现了 Script 接口的类,这意味着所有由该Script 接口声明的属性和方法在脚本中均可使用。
Gradle 的domain model中,所有增强的对象都可以允许用户定义额外属性,例如项目(project)、任务(task)和源码集(source set)等等。额外属性可以通过所属对象的 ext 属性进行添加,读取和设置。当然也可以使用 ext 块同时添加多个属性。
看个例子:
apply plugin: "java"
ext {
springVersion = "3.1.0.RELEASE"
emailNotification = "jerry@sap.com"
}
sourceSets.all { ext.purpose = null }
sourceSets {
main {
purpose = "production"
}
test {
purpose = "test"
}
plugin {
purpose = "production"
}
}
task printProperties << {
println springVersion
println emailNotification
sourceSets.matching { it.purpose == "production" }.each { println it.name }
}
逐行分析:
通过ext代码块将两个扩展属性添加到project对象中去。
将purpose扩展属性添加到所有的sourceSets对象中去。
给名为main,test和plugin的sourceSets对象的purpose属性分别赋值。
最后gradle printProperties打印输出:
Groovy会自动地把一个属性的引用转换为对适当的 getter 或 setter 方法的调用:
println project.buildDir
println getProject().getBuildDir()
输出:
要获取更多Jerry的原创文章,请关注公众号"汪子熙":