• Gradle学习之自己定义属性


    请通过下面方式下载本系列文章的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
     
    此时终端显示:
     
    :showCommandLiePropertiesthis is property3BUILD 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
     
    在笔者所工作的项目中。我们的持续集成server便是通过这样的方式为Gradle设置Property的。

  • 相关阅读:
    选择结构
    java交互Scanner类
    生成Javadoc文档
    Java变量命名规范
    java变量类型和常量类型
    Linux命令目录重点
    网络设置
    任务计划
    用户与权限
    yum安装软件
  • 原文地址:https://www.cnblogs.com/jhcelue/p/6950074.html
Copyright © 2020-2023  润新知