zoukankan      html  css  js  c++  java
  • 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的。

  • 相关阅读:
    HDU 5835 Danganronpa 贪心
    HDU 5842 Lweb and String 水题
    HDU 5832 A water problem 水题
    Codeforces Beta Round #14 (Div. 2) A. Letter 水题
    Western Subregional of NEERC, Minsk, Wednesday, November 4, 2015 Problem K. UTF-8 Decoder 模拟题
    Western Subregional of NEERC, Minsk, Wednesday, November 4, 2015 Problem I. Alien Rectangles 数学
    Western Subregional of NEERC, Minsk, Wednesday, November 4, 2015 Problem H. Parallel Worlds 计算几何
    Western Subregional of NEERC, Minsk, Wednesday, November 4, 2015 Problem F. Turning Grille 暴力
    Western Subregional of NEERC, Minsk, Wednesday, November 4, 2015 Problem C. Cargo Transportation 暴力
    Western Subregional of NEERC, Minsk, Wednesday, November 4, 2015 Problem G. k-palindrome dp
  • 原文地址:https://www.cnblogs.com/jhcelue/p/6950074.html
Copyright © 2011-2022 走看看