在前面的文章中使用到了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使用方式相关推荐

  1. Gradle基础:1: 简介与安装

    这篇文章主要介绍一下Grale的主要特性以及安装方式. 什么是Gradle Gradle是一个开源的自动构建工具,在Apache Ant和Apache Maven的相关概念基础上发展而来,与Maven ...

  2. 提交请求最基础的3种方式以及可以发送请求的7个位置

    提交请求最基础的4种方式以及可以发送请求的7个位置 提交请求最基础的4种方式 一.可以使用jquery发送ajax请求 1.使用全ajax方式发送 请求实例var url = "/test/ ...

  3. 史上最详细的Android Studio系列教程四--Gradle基础

    史上最详细的Android Studio系列教程四--Gradle基础 转载于:https://www.cnblogs.com/zhujiabin/p/5125917.html

  4. IOS开发基础之单文件上传基础最原始的方式

    IOS开发基础之单文件上传基础最原始的方式 info.plist 加入一行代码 <key>NSAppTransportSecurity</key><dict>< ...

  5. 【转】Android Studio安装配置学习教程指南 Gradle基础--不错

    原文网址:http://www.linuxidc.com/Linux/2015-02/113890p4.htm 其实很早之前也写了一篇Gradle的基础博客,但是时间很久了,现在Gradle已经更新了 ...

  6. 02-CPU基础知识:通俗易懂方式理解主频、核心、线程、缓存、架构

    我们通常会将CPU比喻为人类的大脑,是计算机的核心硬件,决定了一台电脑的运算性能好坏.我们在选购CPU的时候,通常都会在网上查询处理器型号参数,主要是看主频.核心.线程.缓存.架构等参数,那么对于小白 ...

  7. android gradle两种多渠道打包方式

    android gradle两种多渠道打包方式 gradle多渠道打包,目前已经了解到的有两种方式: 一种是利用gradle的manifestPlaceholders属性来替换渠道值 另一种是不同的渠 ...

  8. Puppet基础篇6-Puppet更新方式的选型

    Puppet基础篇6-Puppet更新方式的选型 零基础学习Puppet自动化配置管理系列文档 基于C/S架构的Puppet更新方式一般有两种,一种是Agent端设置同步时间主动去PuppetMast ...

  9. Gradle 笔记_1 - Gradle 基础

    Gradle 笔记_1 - Gradle 基础 <Gradle for Android 中文版>笔记 理解 Gradle 基础 Gradle 构建的脚本–build.gradle Grad ...

  10. Gradle基础:4:Task的使用方式

    Task是Gradle的基础单元,这篇文章总结和整理一下关于task的常见的使用方式. 常见的属性和方法 在前面的例子中,我们已经使用task的description属性进行设定gradle task ...

最新文章

  1. IP地址,子网掩码、默认网关,DNS理论解释
  2. 七. jenkins部署springboot项目(4)-linux环境--远程调试
  3. DISCUZ学习笔记01---discuz集成环境的搭建
  4. 区块链和数据科学:如果同时应用这两种技术,将会实现什么?
  5. 复合列NULL问题研究(转)
  6. 【Thinkphp5+Ueditor】Thinkphp5中用Ueditor无法获取内容的问题
  7. 百度硬盘搜索插件开发指南(摘自百度)
  8. 使用python简单免费转换视频格式
  9. 【剑指Offer】输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
  10. 宾州州立大学计算机排名,宾州州立大学帕克分校排名
  11. java获取网页源文件
  12. 计算机网络之应用层图解,秒解应用层HTTP,期末考试不担心!!
  13. 如何制作高大上的PPT--图片
  14. 【java毕业设计】基于javaEE+SSM+MySql的个人博客系统设计与实现(毕业论文+程序源码)——个人博客系统
  15. JS实现对联浮动广告(初级)
  16. 一文就懂HashMap原理!学不会你来砍我!
  17. 最接地气的详解CountDownLatch闭锁应用与实现机制
  18. PHP rsa私钥pkcs8加密,Openssl rsa私钥的PKCS#1和PKCS#8格式以及加密和转化
  19. DirectShow --TEnumMediaType --GetMediaTypeDescription
  20. 食品制造业SCM系统供应商管理模块提升企业采购管理效率,数字化升级供应链

热门文章

  1. 【方向盘】蚂蚁金服上市了,我不想努力了
  2. Go适合做什么?为何这么多人偏爱Go语言?
  3. tts文字转语音_最佳文字转语音(TTS)软件程序和在线工具
  4. 近日,软件项目管理高峰论坛成功召开,项目管理平台发布正式亮相……
  5. StarUML 3 中文文档 组合结构图
  6. 最小公倍数求解完全解读
  7. 【转载】C++编码规范与指导
  8. matlab f检验 f值,excel检验【Excel回归分析中的F检验】
  9. 怎样用微信与电脑连接服务器,怎么使用WebSocket进行微信小程序远程控制电脑屏幕?...
  10. 基于keras+VGG-16的小数据集多分类图像识别(附代码数据集)