Gradle的属性设置大全

简介: Gradle作为一款项目构建工具,由于其强大、灵活、快速、完全兼容Ant等特性,越来越受到人们欢迎。Gradle的灵活有时候也会引起人们的困惑。比如在Gradle中设置变量和属性就有N种办法。由于Gradle的理念是Convention over configruation(约定优于配置),所以如果了解了这些约定,那么在使用Gradle的属性配置时一定会如鱼得水。

Gradle作为一款项目构建工具,由于其强大、灵活、快速、完全兼容Ant等特性,越来越受到人们欢迎。Gradle的灵活有时候也会引起人们的困惑。比如在Gradle中设置变量和属性就有N种办法。由于Gradle的理念是Convention over configruation(约定优于配置),所以如果了解了这些约定,那么在使用Gradle的属性配置时一定会如鱼得水。


在项目根目录下建立名为gradle.properties文件,在该文件中定义需要的属性。这些属性在Gradle构建Gradle领域对象(即project对象实例)时会被自动加到project对象实例中作为其属性被直接调用。

gradle.properties
1
guestName= Bowen
build.gradle
1
2
3
4
task hello << {
     println $guestName
     println "hello, $guestName"
}
1
2
3
4
5
6
$ gradle hello -q
Bowen
hello, Bowen

$ gradle properties | grep guestName
guestName: Bowen

定义在build.gradle中的ext块中。ext准确的说是Gradle领域对象的一个属性,我们可以将自定义的属性添加到ext对象上,Build.gradle中的其它代码片段可以使用。

build.gradle
1
2
3
4
5
6
7
8
ext {
     guestName='Bowen'
}

task hello << {
     println guestName
     println "hello, $guestName"
}
1
2
3
4
5
6
7
8
$ gradle hello -q
Bowen
hello, Bowen

$ gradle properties | grep guestName
guestName: Bowen
$ gradle properties | grep ext
ext: org.gradle.api.internal.plugins.DefaultExtraPropertiesExtension@10ef5fa0

从上述可以看到ext对象其实是DefaultExtraPropertiesExtension对象的一个实例。


在命令行中通过-D或者-P给Gradle实时创建属性。 -D属性会被传送给启动Gradle的jvm,作为一个系统属性被jvm使用。

build.gradle
1
2
3
task hello << {
     println System.properties['guestName']
}
1
2
$ gradle hello -DguestName='Bowen' -q
Bowen

-P属性则会被直接加载到Gradle领域对象上。

build.gradle
1
2
3
task hello << {
      println "hello, $guestName"
}
1
2
$ gradle hello -PguestName='Bowen' -q
hello, Bowen

在Gradle配置文件中创建系统属性。刚讲过在gradle.properties文件可以创建属性,同时我们也可以创建系统属性。如果有systemProp.前缀的属性会被识别为系统属性。

gradle.properties
1
systemProp.guestName = 'Bowen'
build.gradle
1
2
3
task hello << {
      println "hello, " + System.properties['guestName']
}
1
2
$ gradle hello -q
hello, Bowen

将特殊前缀的系统属性或环境变量自动加入到Gradle领域对象中。

如果有环境变量以ORG_GRADLE_PROJECT.为前缀,那么该变量会被自动添加到Gradle领域对象中。同样,如果有系统属性以org.gradle.project.为前缀,那么也会被自动加入到Gradl领域对象中。这一特性的目的之一是为了隐藏一些敏感的信息。比如在执行Gradle脚本时需要传入密码信息,如果以-P的方式传送会被别人看到。而把该属性保存为环境变量,只有系统管理员才有权访问和修改。在运行Gralde的时候该环境变量会被自动加入到Gradle对象中被使用,隔离了明暗数据,又不行影响其他用户使用。(其他用户可以通过-P方式是设置该属性)。

build.gradle
1
2
3
task hello << {
      println "hello, " + guestName
}
1
2
3
4
5
6
$ gradle hello -Dorg.gradle.project.guestName=Bowen -q
hello, Bowen

$ export ORG_GRADLE_PROJECT_guestName=Bob
$ gradle hello -q
hello, Bob
相关文章
|
Java
gradle-wrapper.properties中各属性的含义
gradle-wrapper.properties中各属性的含义 1. gradle-wrapper.properties 每一个用gradle编译的工程,都会有一个gradle\wrapper目录。
2482 0
|
Android开发
修改gradle属性,加快Android studio编译速度
1.在自己项目的gradle中加入 android{ ... dexOptions{ maxProcessCount4// this is the default value javaMaxHeapSize"2g" } } 2.
827 0
|
人工智能 移动开发 Java
Android Studio插件版本与Gradle 版本对应关系
Android Studio插件版本与Gradle 版本对应关系
2413 0
Android Studio插件版本与Gradle 版本对应关系
|
存储 Java Android开发
Android 开发 - 充分利用Gradle
Android 开发 - 充分利用Gradle
172 2
|
2月前
|
Android开发
Android基于gradle task检查各个module之间资源文件冲突情况
Android基于gradle task检查各个module之间资源文件冲突情况
Android基于gradle task检查各个module之间资源文件冲突情况
|
2月前
|
Android开发
Android gradle task任务检查各个module之间资源文件冲突.md
Android gradle task任务检查各个module之间资源文件冲突.md
Android gradle task任务检查各个module之间资源文件冲突.md
|
6月前
|
C# Android开发 开发者
Android gradle编译时字节码处理
Android gradle编译时字节码处理
78 1
|
6月前
|
Android开发
Android Gradle开发—脚本实现自动打包后复制一份APK文件,并修改APK名称,到指定目录作备份
Android Gradle开发—脚本实现自动打包后复制一份APK文件,并修改APK名称,到指定目录作备份
301 0
|
7月前
|
Java 测试技术 Android开发
Android Gradle 干货,看这篇文章就行了
Android Gradle 干货,看这篇文章就行了