zoukankan      html  css  js  c++  java
  • Gradle学习系列之五——自定义Property

      在本系列上篇文章中,我们讲到了增量式构建,在本篇文章中,我们将讲到如何自定义Project的Property。

      请通过以下方式下载本系列文章的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。

     

    (一)在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也实现了该接口。

     

     

    (二)通过命令行参数定义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

     

    (三)通过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

     

    (四)通过环境变量设置Property
      我们还可以通过设置环境变量的方式设置Project的Property。这种方式和(3)一样,需要我们遵循一些约定:在定义环境变量时,每一个Property都需要以“ORG_GRADLE_PROJECT_”为前缀:

    export ORG_GRADLE_PROJECT_property3="this is yet another property3"

     

      在调用showCommandLieProperties时,我们便不需要传入命令行参数了:

    gradle showCommandLieProperties

     

      在笔者所工作的项目中,我们的持续集成服务器便是通过这种方式为Gradle设置Property的。

     

      在下一篇文章中,我们将讲到如何使用java Plugin。

  • 相关阅读:
    服务部署 RPC vs RESTful
    模拟浏览器之从 Selenium 到splinter
    windows程序设计 vs2012 新建win32项目
    ubuntu python 安装numpy,scipy.pandas.....
    vmvare 将主机的文件复制到虚拟机系统中 安装WMware tools
    ubuntu 修改root密码
    python 定义类 简单使用
    python 定义函数 两个文件调用函数
    python 定义函数 调用函数
    python windows 安装gensim
  • 原文地址:https://www.cnblogs.com/davenkin/p/gradle-learning-5.html
Copyright © 2011-2022 走看看