Gradle基础:7:Property使用方式
在前面的文章中使用到了rootProject.name
, 以及task中的description等变量进行直接设定,这些就是gradle内置的property,这篇文章将对gradle的property相关的知识进行介绍。
常用的property:内置
gradle有很多内置的属性,比如project和task相关的常见属性信息如下:
project的property
属性 | 说明 |
---|---|
name | project的名称,可以在setting.xml中进行修改 |
description | 项目描述,一般在build.gradle文件中设定 |
version | 项目版本信息 |
parent | 存在的情况下返回父项目信息 |
group | 用户定义的项目分组信息 |
dependencies | 项目依赖配置信息 |
repositories | 项目配置库信息 |
defaultTasks | 项目缺省运行的任务名称 |
buildDir | 构建脚本(缺省状况下build.gradle)所在目录 |
buildFile | 构建脚本名称(缺省状况下为build.gradle),可使用-b选项修改 |
task的property
属性 | 说明 |
---|---|
name | task的名称 |
description | task的描述 |
group | 设定任务的逻辑分组 |
enabled | 设定任务enable或者是disable |
dependson | 设定dependencies的配置 |
其他内置属性
使用如下命令可以查看更多gradle的内置属性
查看命令:gradle properties
内置属性设定方法
方式1: 直接设定
访问和设定内置属性,可以直接通过属性名进行设定,比如version,但是当出现可能的重名歧义时,通常需要使用限定内容对其歧义进行消除,比如description需要指定是task的description还是project的。
方式2: task的属性可以通过.configure方式定义
定义方式:在 task名称.configure{}中进行定义
格式:task名称.configure{ 属性名称 = 设定内容 }
而使用时直接使用定义中设定的属性名称即可
代码示例
liumiaocn:property liumiao$ cat settings.gradle
println "[Phase: initialization] : settings executed... "
rootProject.name='propertySample'
println "[default]:[rootProject.name] = " + rootProject.name
liumiaocn:property liumiao$ cat build.gradle
println "[phase:configuration] build.gradle ..."
println "[phase:configuration] before setting [version] = " + versiontask setDefaultProperty {group 'propertyTest'description 'set default property'version = 'alpha'
}setDefaultProperty.configure {description = 'property using task.configure'
}tasks.create("display") {group 'propertyTest'description 'display properties'doFirst() {println '[default]:[rootProject.name] = ' + rootProject.nameprintln '[default]:[version] = ' + versionprintln '[default]:[description] = ' + descriptionprintln '[default/configure]:[setDefaultProperty.description] = ' + setDefaultProperty.description}
}
liumiaocn:property liumiao$
- 结果确认
liumiaocn:property liumiao$ gradle display
[Phase: initialization] : settings executed...
[default]:[rootProject.name] = propertySample> Configure project :
[phase:configuration] build.gradle ...
[phase:configuration] before setting [version] = unspecified> Task :display
[default]:[rootProject.name] = propertySample
[default]:[version] = alpha
[default]:[description] = display properties
[default/configure]:[setDefaultProperty.description] = property using task.configureBUILD SUCCESSFUL in 0s
1 actionable task: 1 executed
liumiaocn:property liumiao$
注意:
在Gradle 5中rootProject.name已经不再建议中间使用空格,所以上述的名称为propertySample。
自定义属性
gradle还提供了多种方式进行自定义属性
方式1: 通过ext进行自定义属性
普通方式定义:ext.属性名称 = 设定内容
或者使用
闭包方式定义: ext { 属性名称 = 设定内容 }
而使用时直接使用定义中设定的属性名称即可
- 代码示例
ext {extProperty1 = 'perperty using ext closure'
}ext.extProperty2 = 'perperty using ext.'task displayExtProperties {group 'propertyTest'description 'display ext properties'doFirst() {println '[ext]:[extProperty1] = ' + extProperty1println '[ext]:[ext.extProperty2] = ' + extProperty2}
}
- 执行确认
liumiaocn:property liumiao$ gradle displayExtProperties
[Phase: initialization] : settings executed...
[default]:[rootProject.name] = propertySample> Configure project :
[phase:configuration] build.gradle ...
[phase:configuration] before setting [version] = unspecified> Task :displayExtProperties
[ext]:[extProperty1] = perperty using ext closure
[ext]:[ext.extProperty2] = perperty using ext.BUILD SUCCESSFUL in 0s
1 actionable task: 1 executed
liumiaocn:property liumiao$
方式2: 通过-P参数传入自定义属性
定义方式:使用gradle执行时使用-P参数,形式为:
-P 属性名称 = 设定内容
而使用时直接使用定义中设定的属性名称即可
- 代码示例
task displayParaByP {group 'propertyTest'description 'display -P properties'doFirst() {println '[-P]:[pProperty1] = ' + pProperty1}
}
- 执行确认
liumiaocn:property liumiao$ gradle -P pProperty1='perperty using -P ' displayParaByP
[Phase: initialization] : settings executed...
[default]:[rootProject.name] = propertySample> Configure project :
[phase:configuration] build.gradle ...
[phase:configuration] before setting [version] = unspecified> Task :displayParaByP
[-P]:[pProperty1] = perperty using -P BUILD SUCCESSFUL in 0s
1 actionable task: 1 executed
liumiaocn:property liumiao$
方式3: 通过环境变量设定自定义属性
gradle使用约定:环境变量以ORG_GRADLE_PROJECT_开头的,gradle会约定认为这是通过环境变量方式传入的属性名称。
定义方式:
export ORG_GRADLE_PROJECT_属性名称 = 设定内容
而使用时直接使用定义中设定的属性名称即可
- 代码示例
task displayParaByENV {group 'propertyTest'description 'display ENV properties'doFirst() {println '[ENV]:[envProperty1] = ' + envProperty1}
}
- 执行确认
liumiaocn:property liumiao$ export ORG_GRADLE_PROJECT_envProperty1='property using ENV'
liumiaocn:property liumiao$ gradle displayParaByENV
[Phase: initialization] : settings executed...
[default]:[rootProject.name] = propertySample> Configure project :
[phase:configuration] build.gradle ...
[phase:configuration] before setting [version] = unspecified> Task :displayParaByENV
[ENV]:[envProperty1] = property using ENVBUILD SUCCESSFUL in 0s
1 actionable task: 1 executed
liumiaocn:property liumiao$
方式4: 通过JVM的-D传入自定义属性
gradle使用约定:像环境变量的方式一样,使用JVM也需要gradle能够认出这是传入的属性名称,使用-D以org.gradle.project.开头的,gradle也会约定认为这是要传入的属性名称
定义方式:
gradle -D org.gradle.project.属性名称 = 设定内容
而使用时直接使用定义中设定的属性名称即可
- 代码示例
task displayParaByJVM {group 'propertyTest'description 'display JVM properties'doFirst() {println '[JVM]:[jvmProperty1] = ' + jvmProperty1}
}
- 执行确认
liumiaocn:property liumiao$ gradle -Dorg.gradle.project.jvmProperty1='property using JVM Param' displayParaByJVM
[Phase: initialization] : settings executed...
[default]:[rootProject.name] = propertySample> Configure project :
[phase:configuration] build.gradle ...
[phase:configuration] before setting [version] = unspecified> Task :displayParaByJVM
[JVM]:[jvmProperty1] = property using JVM ParamBUILD SUCCESSFUL in 0s
1 actionable task: 1 executed
liumiaocn:property liumiao$
总结
虽然是非常简单的一个特性,Property作为参数传递的重要方式之一,在gradle中的使用也是非常地灵活的,比如使用环境变量或者JVM参数的方式都比较灵活,即使是在持续构建中的一个脚本的实现,也应该多考虑一下如何将定耦合等,在DevOps实践中,这些正是延伸了的设计需要考虑的地方。
Gradle基础:7:Property使用方式相关推荐
- Gradle基础:1: 简介与安装
这篇文章主要介绍一下Grale的主要特性以及安装方式. 什么是Gradle Gradle是一个开源的自动构建工具,在Apache Ant和Apache Maven的相关概念基础上发展而来,与Maven ...
- 提交请求最基础的3种方式以及可以发送请求的7个位置
提交请求最基础的4种方式以及可以发送请求的7个位置 提交请求最基础的4种方式 一.可以使用jquery发送ajax请求 1.使用全ajax方式发送 请求实例var url = "/test/ ...
- 史上最详细的Android Studio系列教程四--Gradle基础
史上最详细的Android Studio系列教程四--Gradle基础 转载于:https://www.cnblogs.com/zhujiabin/p/5125917.html
- IOS开发基础之单文件上传基础最原始的方式
IOS开发基础之单文件上传基础最原始的方式 info.plist 加入一行代码 <key>NSAppTransportSecurity</key><dict>< ...
- 【转】Android Studio安装配置学习教程指南 Gradle基础--不错
原文网址:http://www.linuxidc.com/Linux/2015-02/113890p4.htm 其实很早之前也写了一篇Gradle的基础博客,但是时间很久了,现在Gradle已经更新了 ...
- 02-CPU基础知识:通俗易懂方式理解主频、核心、线程、缓存、架构
我们通常会将CPU比喻为人类的大脑,是计算机的核心硬件,决定了一台电脑的运算性能好坏.我们在选购CPU的时候,通常都会在网上查询处理器型号参数,主要是看主频.核心.线程.缓存.架构等参数,那么对于小白 ...
- android gradle两种多渠道打包方式
android gradle两种多渠道打包方式 gradle多渠道打包,目前已经了解到的有两种方式: 一种是利用gradle的manifestPlaceholders属性来替换渠道值 另一种是不同的渠 ...
- Puppet基础篇6-Puppet更新方式的选型
Puppet基础篇6-Puppet更新方式的选型 零基础学习Puppet自动化配置管理系列文档 基于C/S架构的Puppet更新方式一般有两种,一种是Agent端设置同步时间主动去PuppetMast ...
- Gradle 笔记_1 - Gradle 基础
Gradle 笔记_1 - Gradle 基础 <Gradle for Android 中文版>笔记 理解 Gradle 基础 Gradle 构建的脚本–build.gradle Grad ...
- Gradle基础:4:Task的使用方式
Task是Gradle的基础单元,这篇文章总结和整理一下关于task的常见的使用方式. 常见的属性和方法 在前面的例子中,我们已经使用task的description属性进行设定gradle task ...
最新文章
- IP地址,子网掩码、默认网关,DNS理论解释
- 七. jenkins部署springboot项目(4)-linux环境--远程调试
- DISCUZ学习笔记01---discuz集成环境的搭建
- 区块链和数据科学:如果同时应用这两种技术,将会实现什么?
- 复合列NULL问题研究(转)
- 【Thinkphp5+Ueditor】Thinkphp5中用Ueditor无法获取内容的问题
- 百度硬盘搜索插件开发指南(摘自百度)
- 使用python简单免费转换视频格式
- 【剑指Offer】输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
- 宾州州立大学计算机排名,宾州州立大学帕克分校排名
- java获取网页源文件
- 计算机网络之应用层图解,秒解应用层HTTP,期末考试不担心!!
- 如何制作高大上的PPT--图片
- 【java毕业设计】基于javaEE+SSM+MySql的个人博客系统设计与实现(毕业论文+程序源码)——个人博客系统
- JS实现对联浮动广告(初级)
- 一文就懂HashMap原理!学不会你来砍我!
- 最接地气的详解CountDownLatch闭锁应用与实现机制
- PHP rsa私钥pkcs8加密,Openssl rsa私钥的PKCS#1和PKCS#8格式以及加密和转化
- DirectShow --TEnumMediaType --GetMediaTypeDescription
- 食品制造业SCM系统供应商管理模块提升企业采购管理效率,数字化升级供应链
热门文章
- 【方向盘】蚂蚁金服上市了,我不想努力了
- Go适合做什么?为何这么多人偏爱Go语言?
- tts文字转语音_最佳文字转语音(TTS)软件程序和在线工具
- 近日,软件项目管理高峰论坛成功召开,项目管理平台发布正式亮相……
- StarUML 3 中文文档 组合结构图
- 最小公倍数求解完全解读
- 【转载】C++编码规范与指导
- matlab f检验 f值,excel检验【Excel回归分析中的F检验】
- 怎样用微信与电脑连接服务器,怎么使用WebSocket进行微信小程序远程控制电脑屏幕?...
- 基于keras+VGG-16的小数据集多分类图像识别(附代码数据集)