zoukankan      html  css  js  c++  java
  • gradle学习之旅(五) gradle构建块

    发现一个讲解gradle的博客,在此做一下记录并推荐出来:
    Gradle学习系列
    在之前的博客中,对gradle的基本用法做了简单的了解,并使用gradle的核心插件构建了一个完整的javaweb项目,如果只是使用插件的默认约定,采用插件提供的标准构建,和使用插件提供的标准task,那么已经可以在新的项目中大胆使用gradle了。
    但是如果想要发挥gradle的各种优势,灵活的使用gradle,真正把项目自动化落地,那么深入了解部分gradle的原理是必不可少的,就如同我们学习spring时不仅需要按部就班学习spring的配置,同时需要明白spring的部分原理。
    在接下来的学习中博主会对gradle的基本原理进行学习

    构建块(building block)

    每个gradle构建都包含三个基本构建块:

    • project
      每个构建都至少包含一个project,多项目构建包含多个project和它们之间的依赖
    • task
      task被包含在project中,准确的说被包含在project的TaskContainer中,可以通过调用下面的方法来获得该project的TaskContainer
    • property
      每一个project和task的实例中都有一些property。

    项目(project)

    • 项目代表一个正在构建的组件,每个构建脚本至少定义一个项目,当构建进程启动后,Gradle基于build.gradle中的配置实例化org.gradle.api.Project接口,并且通过project引用这个实例。
    • 一个project可以创建新的task,添加依赖关系和配置,应用插件和其他的构建脚本它的property可以使用显示或隐式的getter和setter来访问,在当前的构建脚本中访问当前project属性和方法时,不需要通过project引用来调用。

    任务(task)

    • 在project中创建task,实际上是调用了Project实例的task方法,以下面的例子来说明:
    task printVersion(group: 'versioning',description:'print current version'){
        logger.quiet "Version:$version"
    }
    

    上面的代码创建了一个名字为printVersion的task,并且设置了printVersion的属性
    group和description的值。这段代码等价于下面的代码:

    task ([group: 'versioning',description:'print current version'],'printVersion',{
        logger.quiet "Version:$version"
    })
    

    实际上都是调用了这个方法

    调用task方法,gradle会实例化一个org.gradle.api.Task接口的对象,默认使用org.gradle.api.DefaultTask类型,然后将该对象保存在所属的project对象的taskContainer的属性中。

    • 任务在创建后不可以重复创建,但是可以再次调用该任务往里面补充内容,例如在上面的任务定义好之后,可以追加一行输出:
    printVersion{
        println "END printVersion"
    }
    
    • 另外还可以定义任务间的依赖关系。

    属性(property)

    • 在Project和Task构建块中可以访问对应实例的属性(Task中也可以访问Project的属性)
    • gradle允许用户通过拓展属性来新增自定义的属性
      添加属性需要使用ext命名空间
    ext{
    	someOtherProp = 123
    }
    

    或者

    ext.someOtherProp = 123
    

    属性不仅可以在脚本代码中声明,也可以通过属性文件来提取

    • gradle全局属性
      gradle全局属性可以通过在gradle.properties文件中声明直接添加到项目中,这个文件位于<USER_HOME>/.gradle目录下。在这个属性文件中声明的属性对所有的项
      目可用,比如直接在该文件末尾追加:
    someOtherProp=123
    
    • 声明属性的其他方式
      • 项目属性通过-P命令行选项提供
      • 系统属性通过-D命令行选项提供
      • 环境属性按照下面的模式提供
        ORG_GRADLE_PROJECT_propertyName=someValue
        更多的属性添加方式欲更详细的介绍请移步:gradle-userguide,搜索proper*即可。
  • 相关阅读:
    学点 C 语言(40): 函数 多参函数
    存取 ListBox 列表 回复 "徐强" 的问题
    博客园RSS订阅汇总
    博客园电子期刊2012年2月刊发布啦
    上周热点回顾(3.53.11)
    博客园电子期刊2012年3月刊发布啦
    上周热点回顾(3.264.1)
    上周热点回顾(3.193.25)
    上周热点回顾(4.24.8)
    上周热点回顾(2.273.4)
  • 原文地址:https://www.cnblogs.com/Theshy/p/7873523.html
Copyright © 2011-2022 走看看