在gradle构建脚本中有两种类型的变量可以声明:局部变量 ( local ) 和 扩展属性 ( extra )
局部变量
局部变量使用关键字 def 来声明,其只在声明它的地方可见 . 局部变量是 Groovy 语言的一个基本特性
def var = "var_value"
task testLocalVar() {
def varInner = "inner"
println("local var's value:["+var+"]")
}
//println("local varInner's value:["+varInner+"]")
c:\>gradle testLocalVar
local var's value:var_value
:testLocalVar UP-TO-DATE
Deprecated Gradle features were used in this build, making it incompatible with Gradle 5.0.
See /4.5.1/userguide/command_line_interface.html#sec:command_line_warnings
BUILD SUCCESSFUL in 2s
去掉注释行 脚本会报错~找不到对应的变量。变量作用域知识
扩展属性
给出简单例子
ext {
extProperties="extProperties_value"
}
task printProperties << {
println extProperties
}
:printProperties
extProperties_value
属性扩展允许将新属性添加到现有的域对象中。类似map可以存储键值对,所有的已知扩展有一个统一的类型”ext”,支持扩展的对象有projects, tasks, configurations, dependencies等。可以在运行时使用其他对象扩展的对象。
class MyExtension {
String foo
MyExtension(String foo) {
= foo
}
}
project.('custom', MyExtension, "bar")
println project.custom instanceof MyExtension
println project. == "bar"
project.custom {
println foo == "bar"
foo = "other"
}
println project. == "other"
println project.custom instanceof ExtensionAware
project.("nested", MyExtension, "baz")
println project. == "baz"
println project.hasProperty("myProperty") == false
project. = "myValue"
println project.myProperty == "myValue"
更详细添加创建扩展资料
属性扩展的一个重要特性是,它的所有属性都通过具有扩展名的ExtensionAware对象来进行读取和写入
project.ext.set("myProp", "myValue")
println project.myProp == "myValue"
project.myProp = "anotherValue"
println project.myProp == "anotherValue"
println project.ext.get("myProp") == "anotherValue"
属性扩展对象支持groovy属性语法。也就是说,可以通过扩展来读取属性
//展示不同的赋值方式
//1、
project.ext {
myprop = "a"
}
//读取值并判断(下同)
println project.myprop == "a"
println project.ext.myprop == "a"
//2、
project.myprop = "b"
println project.myprop == "b"
println project.ext.myprop == "b"
//3、
project.ext["otherProp"] = "a"
println project.otherProp == "a"
println project.ext["otherProp"] == "a"
属性
properties
Map<String, Object> properties (read-only)
返回所有已注册的属性和它们的当前值作为一个映射。返回的映射与扩展分离。也就是说,对映射所做的任何更改都不会改变它的扩展名。
project.version = "1.0"
println project.hasProperty("version")
println project.ext.properties.containsKey("version") == false
project.ext.foo = "bar"
println project.ext.properties.containsKey("foo")
println project.ext.properties.foo == project.ext.foo
println project.ext.properties.every { key, value -> project.properties[key] == value }
c:\>gradle build
true
true
true
true
true
:buildEnvironment
------------------------------------------------------------
Root project
------------------------------------------------------------
classpath
No dependencies
Deprecated Gradle features were used in this build, making it incompatible with Gradle 5.0.
See https:///4.5.1/userguide/command_line_interface.html#sec:command_line_warnings
BUILD SUCCESSFUL in 3s
1 actionable task: 1 executed
方法
Method | Description |
---|---|
get(name) | 用给定的名称返回对应属性的值。当使用Groovy的额外属性扩展时,可以通过Groovy的属性语法获得属性。 |
has(name) | 通过指定的名称来返回该扩展是否拥有某一个属性 |
set(name, value) | 更新或者创建一个键值对 |
//projct扩展属性 projectFoo
project.ext { projectFoo = "bar" }
println project.ext.get("projectFoo") == "bar"
println project.ext.projectFoo == "bar"
println project.ext["projectFoo"] == "bar"
println project.projectFoo == "bar"
println project["projectFoo"] == "bar"
//是否具有某属性hasFoo
println "has :"+ (project.ext.has("hasFoo") == false)
println "has :"+ (project.hasProperty("hasFoo") == false)
project.ext.hasFoo = "bar"
println "has :"+ project.ext.has("hasFoo")
println "has :"+ project.hasProperty("hasFoo")
//设置新的key/value
project.ext.set("setFoo", "bar")
project.ext.setFoo = "bar"
project.ext["setFoo"] = "bar"
//可以更新已经存在的值
project.setFoo = "newbar"
project["setFoo"] = "newbar"
增加判断~~
c:\>gradle build
true
true
true
true
true
has :true
has :true
has :true
has :true
:buildEnvironment
------------------------------------------------------------
Root project
------------------------------------------------------------