天使漫步IT工作室

【学习笔记】Gradle中自定义Project的Property


在使用Gradle中,我们常常需要定义一些property,以便在构建的时候使用。这一节我们就来学习如何使用Gradle在Project中定义属于工程自己的property。

一、默认Property

Gradle默认提供一些Property,在使用Property的时候可以默认使用。

Gradle在默认情况下已经为Project定义了很多Property,其中比较常用的有:

● project:Project本身
● name:Project的名字
● path:Project的绝对路径
● description:Project的描述信息
● buildDir:Project构建结果存放目录
● version:Project的版本号

自定义Property

1、在build.gradle文件中定义Property

在build.gradle文件中向Project添加额外的Property时,我们并不能直接定义,而是应该通过ext来定义。

ext.property1 = "this is property1"

ext 的闭包样式:

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的。

当前页面是本站的「Baidu MIP」版。查看和发表评论请点击:完整版 »