• Gradle之属性Properties


    每个Project和Task实例都提供了setter和getter方法来访问属性,属性可以是任务的描述或者项目的版本号。
    properties其实是Java项目中的配置文件,不是Gradle独创的。又因为Gradle语法可以和Java进行混合使用,所以在Java项目上面使用properties文件的方式,在Gradle上面也可以使用。
    Gradle借用了这一点,所以内置了对gradle.properties的使用方式

    Project自带的属性

    Gradle在默认情况下已经为Project定义了很多属性,其中比较常用的有:
    project:Project本身对象
    name:Project的名字
    path:Project的绝对路径
    description:Project的描述信息
    buildDir:Project构建结果存放目录
    version:Project的版本号
    属性都可以通过getter和setter方法来访问,也可以直接使用点好的形式来访问,例如:

    setDescription('myProject')
    println "Description of project $name: "+project.description
    
    • 1
    • 2

    当在build.gradle中访问属性和方法的时候,不需要使用project变量,它会假设你使用的是project实例。但是有一些情况需要注意,例如:

    version = 'this is the project version'
    description = 'this is the project description'
     
    task showProjectProperties << {
       println version
       println project.description
       println description
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    由于Task本身也有description属性,所以当在Task中,如果不显式的指定project,就会打印的是Task的description。这是因为定义Task的闭包将delegate设置成了当前的Task。有关delegate的介绍,我们可以看前一篇文章。
    Gradle还为我们提供了多种方法来自定义Project的Property。

    外部属性/额外属性

    外部属性一般存储在键值对中,要添加一个属性,你需要使用ext命名空间,看一个例子:

    //Only initial declaration of extra property requires you to use ext namespace
    project.ext.myProp = ‘myValue’
    ext {
    someOtherProp = 123
    }

    //Using ext namespace to access extra property is optional
    assert myProp == ‘myValue’
    println project.someOtherProp
    ext.someOtherProp = 567

    相似的,外部属性可以定义在一个属性文件中: 通过在/.gradle路径或者项目根目录下的 gradle.properties文件来定义属性可以直接注入到你的项目中,他们可以通过 project实例来访问,注意/.gradle目录下只能有一个 Gradle属性文件即使你有多个项目,在属性文件中定义的属性可以被所有的项目访问,假设你在你的gradle.properties文件中定义了下面的属性:

    exampleProp = myValue
    someOtherProp = 455

    你可以在项目中访问这两个变量:

    assert project.exampleProp == ‘myValue’

    task printGradleProperty << {
    println “Second property: $someOtherProp”
    }

    定义属性的其他方法

    你也可以通过下面的方法来定义属性:

    通过-P命令行选项来定义项目属性
    通过-D命令行选项来定义系统属性
    
    • 1
    • 2

    -D属性会被传送给启动Gradle的jvm,作为一个系统属性被jvm使用。
    -P属性则会被直接加载到Gradle领域对象上

    Gradle支持三种Properties

    System Properties:

    1.可通过gradle.properties文件,环境变量或命令行-D参数设置
    2.可在setting.gradle或build.gradle中动态修改,在setting.gradle中的修改对buildscript block可见;
    3.所有工程可见,不建议在build.gradle中修改
    4.多子工程项目中,子工程的gradle.properties会被忽略掉,只有root工程的gradle.properties有效
    我们可以使用 -D 的命令行 option 来给运行 Grade 的 JVM 传递 System properties 参数
    除了使用命令行,我们也可以在 gradle.properties 文件中添加 System properties,只需要加上systemProp.前缀:

    systemProp.gradle.wrapperUser=myuser
    systemProp.gradle.wrapperPassword=mypassword
    
    • 1
    • 2

    Project Properties:

    1.可通过gradle.properties文件,环境变量或命令行-P参数设置,优先级是:
    如果属性可能配置在多个位置,如下第一个找到的位置优先级最高。

    • command line, as set using the -P / --project-prop environment options.//使用命令行-P设置的属性

    • gradle.properties in GRADLE_USER_HOME directory. //GRADLE_USER_HOME的gradle.properties

    • gradle.properties in project root directory.// 根目录的gradle.properties

    • gradle.properties in Gradle installation directory. //Gradle安装目录的gradle.properties

    2.可在build.gradle中动态修改,但引用不存在的project properties会立即抛错
    3.动态修改过的project properties在buildscript block中不可见

    我们可以通过System properties 或者 Environment variables 添加一些自定义属性,Gradle 就可以将这些自定义属性添加到 Project 属性中。
    例如当我们设置了一个环境变量:ORG_GRADLE_PROJECT_prop=somevalue,那么 Gradle 就会设置一个名为 prop 的属性,它的值为 “somevalue”,注意这里的前缀ORG_GRADLE_PROJECT。Gradle 也支持通过设置 System properties 来给 Project 对象添加属性,只是属性的前缀不同,为:org.gradle.project。就像 org.gradle.project.prop,也可以给 Project 添加一个名为 prop 的属性

    Project ext properties:

    1.可在项目的build.gradle中声明和使用,本工程和子工程可见
    2.不能在setting.gradle中访问

    如果有多处设置,加载次序如下,后面的覆盖前面的设置
    1.from gradle.properties located in project build dir.
    2.from gradle.properties located in gradle user home.
    3.from system properties, e.g. when -Dsome.property is used in the command line.
    4.setting.gradle
    5.build.gradle

  • 相关阅读:
    java毕业设计《EE开发技术》课程学习网站Mybatis+系统+数据库+调试部署
    已知连续型随机变量X的概率密度函数,推导随机变量Y=g(X)的概率密度函数
    钉钉如何通过AppLink快速连接仓储系统
    vue3+ts 异步组件的使用
    多元共进|2023 Google 开发者大会主旨演讲亮点回顾
    思科华为设备DHCP配置命令对比
    Django--30Docker部署Django项目到Linux生产环境
    Android11 实现有线网络和wifi共存
    【2023最新版】Python全栈知识点总结
    知识图谱-命名实体-关系-免费标注工具-快速打标签-Python3
  • 原文地址:https://blog.csdn.net/caizehui/article/details/126214350