请通过下面方式下载本系列文章的Github演示样例代码:

git clone https://github.com/davenkin/gradle-learning.git

 

 

在前面的文章中我们讲到,设置和读取Project的Property是使用Gradle的一个非常重要的方面。比方。非常多Plugin都会向Project中增加额外的Property,在使用这些Plugin时,我们须要对这些Property进行赋值。

 

Gradle在默认情况下已经为Project定义了非常多Property,当中比較经常使用的有:

project:Project本身

name:Project的名字

path:Project的绝对路径

description:Project的描写叙述信息

buildDir:Project构建结果存放文件夹

version:Project的版本

 

下面。我们首先设置Project的version和description属性。再定义showProjectProperties以打印这些属性:

 

version = 'this is the project version'

description = 'this is the project description'

task showProjectProperties << {

  println version

  println project.description

}

 

请注意。在打印description时,我们使用了project.description,而不是直接使用description。

原因在于,Project和Task都拥有description属性。而定义Task的闭包将delegate设置成了当前的Task。故假设直接使用description。此时打印的是showProjectProperties的description。而不是Project的,所以我们须要显式地指明project。有关delegate的很多其它知识,请參考本系列的这篇文章。

Gradle还为我们提供了多种方法来自己定义Project的Property。

(1)在build.gradle文件里定义Property

在build.gradle文件里向Project加入额外的Property时。我们并不能直接定义,而是应该通过ext来定义。假设要加入一个名为property1的Property,我们应该:

 

ext.property1 = "this is property1"

 

另外。我们也能够通过闭包的方式:

 

ext {   property2 = "this is property2"}

 

在定义了Property后。使用这些Property时我们则不须要ext,而是能够直接訪问:

 

task showProperties << {

  println property1

  println property2

}

 

其实,不论什么实现了ExtensionAware接口的Gradle对象都能够通过这样的方式来加入额外的Property,比方Task也实现了该接口。

 

(2)通过命令行參数定义Property

Gradle还提供了-P命令行參数来设置Property,比方:

 

task showCommandLieProperties << {

  println property3

}

 

在运行“gradle showCommandLieProperties”时,终端输出例如以下:

 

* What went wrong:Execution failed for task ':showCommandLieProperties'.> Could not find property 'property3' on task ':showCommandLieProperties'.

 

表示property3并没有被定义。在调用gradle命令时,通过-P參数传入该Property:

 

gradle -Pproperty3="this is property3" showCommandLieProperties

 

此时终端显示:

 

:showCommandLiePropertiesthis is property3BUILD SUCCESSFUL

 

(3)通过JVM系统參数定义Property

我们知道。在java中。我们能够通过-D參数定义JVM的系统參数。然后在代码中能够能够通过System.getProperty()进行获取。

在Gradle中。我们也能够通过-D的方式向Project传Property。仅仅是此时我们须要遵循一些约定:每个通过-D方式声明的Property都须要以“org.gradle.project”为前缀。对于上面的showCommandLieProperties。我们也能够通过下面方式

设置property3:

 

gradle -Dorg.gradle.project.property3="this is another property3" showCommandLieProperties

 

(4)通过设置环境变量Property

我们还能够通过环境变量设置的方式设置Project的Property。这样的方式和(3)一样,须要我们遵循一些约定:在定义环境变量时,每个Property都须要以“ORG_GRADLE_PROJECT_”为前缀:

 

export ORG_GRADLE_PROJECT_property3="this is yet another property3"

 

在调用showCommandLieProperties时,我们便不须要传入命令行參数了:

 

gradle showCommandLieProperties

 

在笔者所工作的项目中。我们的持续集成server便是通过这样的方式为Gradle设置Property的。

Gradle学习之自己定义属性的更多相关文章

  1. 《C# 语言学习笔记》——定义属性

    属性定义的方式与字段类似,但包含的内容比较多. 属性拥有两个类似于函数的块,一个块用于获取属性的值,另一个块用于设置属性的值.这两个块也称访问器,分别用于get和set关键字定义,可以用于控制对属性的 ...

  2. js学习笔记3---自定义属性

    1.自定义属性-----JS可以为任何 HTML元素 添加 任意个 自定义属性 方法:元素.属性 = 属性值 如:aBtn[0].abc = 123; 2.添加索引值,匹配数组 for(i=0; i& ...

  3. Gradle学习

    Gradle是一种构建工具,它抛弃了基于XML的构建脚本,取而代之的是采用一种基于Groovy的内部领域特定语言.近期,Gradle获得了极大的关注,这也是我决定去研究Gradle的原因. 这篇文章是 ...

  4. Gradle学习总结——抓重点学Gradle

    前言 网上关于Gradle的教程很多,但很多都是以"面"切入- 通过大量讲解其用法及其API分类来阐述.但Gradle API使用技巧众多,API更是成千上百,臣妾记不住呀.个人深 ...

  5. Gradle学习系列之九——自定义Task类型

    在本系列的上篇文章中,我们学习了多Project构建,在本篇文章中,我们将学到如何自定义Task类型. 请通过以下方式下载本系列文章的Github示例代码: git clone https://git ...

  6. MVVM Light 新手入门(2) :ViewModel / Model 中定义“属性” ,并在View中调用

    今天学习MVVM架构中“属性”的添加并调用,特记录如下,学习资料均来自于网络,特别感谢翁智华的利刃 MVVMLight系列. 一个窗口的基本模型如下: View(视图) -> ViewModel ...

  7. Swift学习——类的定义,使用,继承,构造等(五)

    Swift学习--类的定义,使用.继承,构造等(五) 类的使用说明 1 使用class和类名来创建一个类名,比如: class student 2 类中属性的声明和常量和变量一样,唯一的差别就是他们的 ...

  8. HTML5的data-*自己定义属性

    HTML5添加了一项新功能是自己定义数据属性.也就是data-*自己定义属性.在HTML5中我们能够使用以data-为前缀来设置我们须要的自己定义属性,来进行一些数据的存放.当然高级浏览器下可通过脚本 ...

  9. 第7.27节 Python案例详解: @property装饰器定义属性访问方法getter、setter、deleter

    上节详细介绍了利用@property装饰器定义属性的语法,本节通过具体案例来进一步说明. 一.    案例说明 本节的案例是定义Rectangle(长方形)类,为了说明问题,除构造函数外,其他方法都只 ...

随机推荐

  1. jQuery调用WebService ( 同源调用)

    转自原文 jQuery调用WebService 1.编写4种WebService方法     [WebService(Namespace = "http://tempuri.org/&quo ...

  2. 【网络协议】TCP协议简单介绍

        本文仅仅是对TCP协议做个简要的介绍.     TCP协议,即传输控制协议.与UDP协议同处于传输层,相同使用相同的网络层,但TCP提供了一种可靠的.面向连接的传输数据服务,它会在两个使用TC ...

  3. BEGINNING SHAREPOINT&#174; 2013 DEVELOPMENT 第6章节--在SharePoint2013中开发、集成和构建应用程序 总结

    BEGINNING SHAREPOINT® 2013 DEVELOPMENT 第6章节--在SharePoint2013中开发.集成和构建应用程序  总结         SharePoint开发已经 ...

  4. NOIP2017提高组模拟赛 10 (总结)

    NOIP2017提高组模拟赛 10 (总结) 第一题 机密信息 FJ有个很奇怪的习惯,他把他所有的机密信息都存放在一个叫机密盘的磁盘分区里,然而这个机密盘中却没有一个文件,那他是怎么存放信息呢?聪明的 ...

  5. php设计模式之工厂方法模式

    php设计模式之工厂方法模式 工厂方法模式 工厂方法模式(Factory Method Pattern)又称为工厂模式,也叫虚拟构造器(Virtual Constructor)模式或者多态工厂(Pol ...

  6. linux下挂载ISCSI存储设备

    安装 首先要在存储设备上做好RAID,设置好iSCSI 目标方(target). 这里主要说明iSCSI initiator的安装. 不同的操作系统对应各自的iSCSI initiator,以Redh ...

  7. awesome python 中文版 相见恨晚!(pythonNB的第三方资源库)

    Awesome Python中文版来啦! 原文链接:Python 资源大全 内容包括:Web框架.网络爬虫.网络内容提取.模板引擎.数据库.数据可视化.图片处理.文本处理.自然语言处理.机器学习.日志 ...

  8. BZOJ 4568 倍增维护线性基

    在树的路径上选取一些点 使得这些点权xor后的结果最大 思路: 时限60s 59696ms卡过去了哈哈哈 //By SiriusRen #include <cstdio> #include ...

  9. 洛谷P1067 多项式输出(模拟)

    题目描述 一元 n 次多项式可用如下的表达式表示: 其中,aixi称为 i 次项,ai 称为 i 次项的系数.给出一个一元多项式各项的次数和系数,请按照如下规定的格式要求输出该多项式: 1. 多项式中 ...

  10. Android PullToRefreshListView设置各个item之间的间距

    要设置第三方的上拉下载listView的item之间的间距,可以在xml布局文件中的listView节点中设置xml的属性即可: android:divider="#00000000&quo ...