Gradle这篇文章就够用了06Property使用方式
常用的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{ 属性名称 = 设定内容 }
而使用时直接使用定义中设定的属性名称即可
示例
- 代码
orrincn:property orrin$ cat settings.gradle println "[Phase: initialization] : settings executed... "
rootProject.name="propertySample"
println "[default]:[rootProject.name] = " + rootProject.name
orrincn:property orrin$ cat build.gradle
println "[phase:configuration] build.gradle ..."
println "[phase:configuration] before setting [version] = " + version
task 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.name
println "[default]:[version] = " + version
println "[default]:[description] = " + description
println "[default/configure]:[setDefaultProperty.description] = " + setDefaultProperty.description
}
}
orrincn:property orrin$
- 结果确认
orrincn:property orrin$ 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.configure
BUILD SUCCESSFUL in 0s
1 actionable task: 1 executed
orrincn:property orrin$
注意:在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] = " + extProperty1
println "[ext]:[ext.extProperty2] = " + extProperty2
}
}
- 执行确认
orrincn:property orrin$ 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
orrincn:property orrin$
方式2: 通过-P参数传入自定义属性
定义方式:使用gradle执行时使用-P参数,形式为:
-P 属性名称 = 设定内容
而使用时直接使用定义中设定的属性名称即可
- 代码示例
task displayParaByP { group "propertyTest"
description "display -P properties"
doFirst() {
println "[-P]:[pProperty1] = " + pProperty1
}
}
- 执行确认
orrincn:property orrin$ 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
orrincn:property orrin$
方式3: 通过环境变量设定自定义属性
gradle使用约定:环境变量以ORG_GRADLE_PROJECT_开头的,gradle会约定认为这是通过环境变量方式传入的属性名称。
定义方式:
export ORG_GRADLE_PROJECT_属性名称 = 设定内容
而使用时直接使用定义中设定的属性名称即可
- 代码示例
task displayParaByENV { group "propertyTest"
description "display ENV properties"
doFirst() {
println "[ENV]:[envProperty1] = " + envProperty1
}
}
- 执行确认
orrincn:property orrin$ export ORG_GRADLE_PROJECT_envProperty1="property using ENV"orrincn:property orrin$ 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 ENV
BUILD SUCCESSFUL in 0s
1 actionable task: 1 executed
orrincn:property orrin$
方式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
}
}
- 执行确认
orrincn:property orrin$ 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 Param
BUILD SUCCESSFUL in 0s
1 actionable task: 1 executed
orrincn:property orrin$
总结
虽然是非常简单的一个特性,Property作为参数传递的重要方式之一,在gradle中的使用也是非常地灵活的,比如使用环境变量或者JVM参数的方式都比较灵活,即使是在持续构建中的一个脚本的实现,也应该多考虑一下如何将定耦合等,在DevOps实践中,这些正是延伸了的设计需要考虑的地方。
以上是 Gradle这篇文章就够用了06Property使用方式 的全部内容, 来源链接: utcz.com/z/515154.html