3 gradle 属性 分类
来源:互联网 发布:淘宝购物如何付款 编辑:程序博客网 时间:2024/06/11 11:30
1. Project和Task
对于build.gradle配置文件,当运行Gradle <Task> 时,Gradle会为我们创建一个Project的对象,来映射build.gradle中的内容。其中呢,对于不属于任何Task范畴的代码,Gradle会创建一个Script类的对象,来执行这些代码;对于Task的定义,Gradle会创建Task对象,并将它会作为project的属性存在(实际上是通过getTaskName完成的)。ok,看一个简单的例子:
新建文件basic/build.gradle,然后加入如下部分代码:
task hello << {
println "the current task name is $name"
println "hello world"
}
当运行这个例子时,首先Gradle会创建一个Porject的对象,然后将它和build.gradle的内容映射起来。在这个例子中,project包括两部分:
1)可执行脚本定义
按照之前提到的,可执行脚本的定义将直接被创建成对应的Script类的对象
在这个例子中,Script对应的部分就是第一行println的部分,然后执行的结果就是打印出 "the project name is basic"。
默认的,Project的名字是当前build.gradle所在目录的名字,在这个例子中,build.gradle放在basic目录下,因此,project的name也就是basic.
2)Task定义
在这个例子中,Gradle将创建一个Task的实例,将其和定义的task内容关联起来。另外,按照之前所说的,当Gradle运行时,我们可以使用访问project属性的方式去访问它。
例如,这个例子中,我们可以使用project.hello来访问这个task。因为这个task hello已经成为project的一个属性,那么当我们使用gradle properties(properties是gradle自带的一个Task,它能列出当前project级别的所有属性,可以使用gradle tasks查看更多内建的Task)来获取project级别的属性列表时,也将会得到'hello'。
另外,有一点要注意的是,在这个例子中,task中使用的$name,并不是Project的name,它是当前Task的name,因为它被使用在Task的scope里。
执行Gradle hello,输出的结果将是:
the current task name is hello
hello world
2. 定义属性
在Gradle中,我们可以定义以下三种属性并使用它们:
1)System Properties
System Properties 实际是指的JVM的system properties。我们知道,在运行java程序时,可以使用-D来设置Java的系统变量,在Gradle中,你也可以做同样的事情。比如
gradle xxx -DmySystemProp=xxxx
同时,在build.gradle中,应该这样使用这个变量:
println System.properties['system']
}
2)Project Properties
Project Properties是Gradle专门为Project定义的属性。它的最大优点在于当运行gradle的时候,我们可以使用-P来设置它的值。比如,
gradle xxx -PmyProjectProp=xxxxx
而在build.gradle中,可以这样使用这个变量:
if (project.hasProperty('commandLineProjectProp')) {
println commandLineProjectProp
}
}
3)Ext(ra) Properties
另外,我们还可以为Project或者Task定义Ext属性,也称动态属性,我们必须使用关键字ext(对应ExtraPropertiesExtension的实例)去定义动态属性。从这点可以看出,Gradle已经为我们设计了很多不同的类,去做不同的事情,我们只需要遵循Convention,使用他们即可。如果忘记写ext关键字,gradle运行时则会提示:
"Dynamic properties are deprecated...."。这是因为以前版本的gradle定义动态属性时,不需要加ext关键字的。
对于Project和Task而言,动态属性定义的方式完全一样,只是作用域不一样。
当定义完成后,我们就可以使用project.prop 或者 task.prop来访问这些动态属性了。下面让我们看一个例子:
task printExtProps << {
ext.taskProperties="ext.task.properties-value"
if (project.hasProperty('projectProperties')){
println "ext.projectProperties values is " + projectProperties
}
if (printExtProps.hasProperty('taskProperties')){
println "task has defined ext.taskProperties value is " + taskProperties
}
}
注意:,对于ext定义的动态属性,并不能通过外部的方式修改它的值,只能在build.gradle中去设置或者修改它的值。
同时,如果是为project定义的ext动态属性,也会显示在gradle properties的结果中。
- 3 gradle 属性 分类
- Gradle读取配置属性
- gradle 配置文件 build.gradle 属性详解
- CSS分类属性
- CSS分类属性
- css分类属性
- css分类属性
- css 样式属性分类
- 分类添加属性
- Swift属性分类
- <css 十六>分类属性
- CSS样式属性分类
- CSS属性分类
- 分类添加属性,_cmd。
- 属性的分类
- iOS 分类增加属性
- 分类属性设置-可视化
- Gradle学习之自定义属性
- Linux 设备管理(linux网络协议栈笔记)
- 原生应用将死
- CSS框架构
- 心理调整
- d3中x轴数据名称重复导致缺失的问题
- 3 gradle 属性 分类
- Who's in the Middle POJ2388
- springmvc 源码学习 handlerInterceptor
- SpringBoot加载静态资源
- PMP--项目整合管理(三)
- SpringIOC的初始化
- 电脑主机选购---硬盘
- 资料 05encodeURI来解决URL传中文参数乱码问题(转载)
- VBA:针对一个工作簿中多个表,显示表名中含特定字符的表,其他表隐藏