`
wbj0110
  • 浏览: 1604547 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

Gradle学习系列之五——自定义Property

阅读更多

请通过以下方式下载本系列文章的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

 

此时终端显示:

:showCommandLieProperties
this is property3

BUILD 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

 

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

分享到:
评论

相关推荐

    MyBatis框架的学习(七)——MyBatis逆向工程自动生成代码

    在MyBatis的学习过程中,逆向工程(Reverse Engineering)是一个非常实用的功能,它可以自动生成基于数据库模式的Java实体类、Mapper接口及XML配置文件,极大地提高了开发效率。 逆向工程在MyBatis中的主要作用是...

    安卓Android源码——项目 ——页面特效集合(附源码).zip

    总之,这个“安卓Android源码——项目 ——页面特效集合”提供了丰富的实践案例,涵盖了Android页面特效的关键技术。通过深入研究这些源码,开发者不仅可以掌握各种动画效果的实现,还能提升自己的编程技巧和项目...

    Android应用源码项目之——漂亮的平台书架.zip

    这个压缩包“Android应用源码项目之——漂亮的平台书架.zip”显然包含了开发一个美观的Android平台上书架应用的源代码。从标题和描述中我们可以推测,这是一个专注于UI设计和书籍展示的应用,可能是用于虚拟图书馆...

    安卓Android源码——GuideViewDemo(超炫丽用户引导).zip

    3. **动画效果**:炫丽的用户引导往往离不开动画效果,开发者可以从中学习如何使用Android的动画库(如Property Animation)来创建各种过渡和交互效果。 4. **触摸事件处理**:在用户引导过程中,可能需要监听和...

    Android源码——高德地图图层效果源码.zip

    这个压缩包“Android源码——高德地图图层效果源码.zip”(实际上应该是rar文件)很可能是为了展示如何在Android应用中自定义高德地图的图层效果。下面将详细探讨Android与高德地图集成以及如何实现图层效果。 1. *...

    安卓Android源码——圆形旋转菜单CircleMenu.zip

    【Android源码——圆形旋转菜单...学习和研究这个项目,开发者不仅可以了解如何在Android上实现复杂的UI效果,还能掌握到Android动画机制、自定义视图以及MVVM架构等相关知识,对提升Android开发技能非常有帮助。

    安卓Android源码——FlipDemo(高仿QQ左右滑动菜单).zip

    【标题】中的“安卓Android源码——FlipDemo(高仿QQ左右滑动菜单)”表明这是一个关于Android平台的开源项目,其主要目标是实现一个类似QQ应用的左右滑动菜单功能。这种菜单通常被称为抽屉式导航(Drawer Navigation...

    安卓Android源码——菜单动画(类似QQ空间)Demo.zip

    【标题解析】 本资源是关于安卓Android平台...总结来说,这个Demo项目为Android开发者提供了一个学习和实践自定义菜单动画的平台,通过分析和修改源代码,可以深入理解Android动画机制,并提升在实际项目中的应用能力。

    网络程序设计——JSP从入门到精通

    通过学习《网络程序设计——JSP从入门到精通》,读者可以系统地掌握JSP的各个方面,从基础语法到高级特性,再到实际项目开发,逐步成为一名熟练的JSP开发者。书中提供的PDG格式阅读器可以帮助读者方便地阅读和学习这...

    Android源码——仿Win8的metro的UI界面源码.zip

    "Android源码——仿Win8的metro的UI界面源码" 这个标题揭示了我们要探讨的核心内容:一个针对Android平台的开源项目,其目标是模仿Windows 8(或Windows 10)的“Modern UI”(也被称为“Metro”风格)界面。...

    淘宝倒计时自定义控件

    通过Gradle或JitPack等平台发布,其他开发者就可以通过添加依赖直接在项目中使用这个自定义控件。 总的来说,"淘宝倒计时自定义控件"的实现涉及到了Android UI设计、线程管理、时间处理、动画实现等多个核心知识点...

    安卓Android源码——乐动力的酷黑旋转引导动画.zip

    虽然描述只有简单的一句“安卓Android源码——乐动力的酷黑旋转引导动画.zip”,但我们可以推测这应该是一个开源项目,开发者或学习者可以下载这个zip文件,查看并学习如何在Android平台上实现酷炫的旋转引导动画。...

    Android源码——图像连环画特效源码_new_38.zip

    这个压缩包"Android源码——图像连环画特效源码_new_38.zip"显然是一个专门针对Android平台的图像处理项目,它包含了实现连环画特效的源代码。连环画特效是一种将普通照片转化为具有漫画或卡通风格的图像处理技术,...

    安卓Android源码——FlipImageView-master.zip

    在`FlipImageView-master.zip`这个压缩包中,我们可以找到`FlipImageView`的完整源码,这为我们提供了学习和自定义这个组件的宝贵机会。 `FlipImageView`的核心功能是实现图像的翻转效果,这通常涉及到Android的...

    安卓Android源码——安卓Android高级图片滚动控件,3D版的图片轮播器Demo.rar

    "安卓Android源码——安卓Android高级图片滚动控件,3D版的图片轮播器Demo.rar" 这个标题明确指出我们正在讨论一个针对Android平台的源码项目,它是一个高级的图片滚动控件,具有3D效果的图片轮播功能。在Android...

    安卓Android源码——环形的调节条,用于工程中特殊的调值控件,拟物控件的制作.zip

    8. **构建和打包(Build and Packaging)**:使用Android Studio的Gradle构建系统,开发者可以将自定义控件作为模块或库项目进行管理和发布,便于在多个应用项目中复用。 9. **测试与调试(Testing and Debugging)...

    安卓Android源码——(迷宫小球).zip

    4. **图形渲染**:为了显示迷宫和小球,开发者可能使用了Canvas进行自定义绘图,或者利用OpenGL ES这样的图形库进行高性能的3D渲染。如果迷宫是静态的,可能直接使用Bitmap资源;如果是动态生成的,可能涉及到内存...

    Quartz Spring整合——附带webservice Demo

    在"Quartz Spring整合——附带webservice Demo"的项目中,我们可以看到如何将这两个强大的工具结合在一起。这个Demo可能包含了一个使用Quartz调度器来触发Web服务调用的示例。Web服务(Webservice)是一种基于标准的...

    安卓Android源码——翻翻乐--抢答--转盘.zip

    在本压缩包“安卓Android源码——翻翻乐--抢答--转盘.zip”中,包含了一个名为“SMI-Interactive-Game”的项目,这显然是一款针对安卓平台开发的互动游戏应用。游戏集成了翻翻乐、抢答和转盘等经典游戏元素,非常...

    JSON Schema 生成库——json-schema-inferrer(java版).rar

    例如,你可以创建一个`SchemaInferrer`实例,然后调用其方法如`property(String name, JsonType type)`来指定属性及其类型。 3. **实例驱动的Schema生成**:该库的核心功能是根据提供的JSON实例数据自动生成相应的...

Global site tag (gtag.js) - Google Analytics