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*即可。
posted @ 2017-11-21 15:48  The_shy  阅读(405)  评论(0编辑  收藏  举报