Gradle中task使用, 构建脚本


每一个Gradle构建都包含三个基本构建快:project, task, property

  • project项目:
    一个project表示一个正在构建的组件,每一个构建脚本build.gradle至少定义一个脚本
    项目的属性和方法可以直接使用,不需要使用project变量
  • task任务
    任务动作定义了一个当任务执行时的最小工作单元
  • property属性
    每一个project和task都提供getter和setter访问属性
    扩展属性:

1)使用ext命名空间来声明

project.ext.myProp = ‘myValue’
或者 ext{
someOtherProps =123 //key-value的形式,
}

2)也可以通过gradle.properties添加属性这个属性是属于全局的位于<USER_HOME>.gradle目录下或者项目的根目录下,一个用户这个文件只有一个,可以手动创建这个gradle.properties文件(必须是这个名字,系统默认)
  设置属性myprop =myvalue
3)通过命令行添加
  项目属性通过-P 命令行选项提供
  系统属性通过-D 命令行选项提供

4)环境属性通过ORG_GRADLE_PROJECT_propertyName=someValue

1.gradle的生命周期

分为三个阶段:初始化阶段,配置阶段,执行阶段

  • 初始化阶段: Gradle可以构建一个和多个项目。在初始化阶段,Gradle会确定哪些项目参与构建,并且为这些项目创建一个Project实例。
  • 配置阶段: 在这个阶段,会配置project对象。将执行构建的所有项目的构建脚本。也就是说,会执行每个项目的build.gradle文件。
  • 执行阶段: Gradle确定要在执行期间创建和配置的任务子集。子集由传递给gradle命令和当前目录的任务名称参数确定。 Gradle然后执行每个选定的任务。

简单点说:
   初始化阶段会实例化 setting.gradle里面声明的项目,特别是多项目的时候
   配置阶段主要是配置task(系统的以及自定义声明的)
   执行阶段(会执行系统给定的task以及自定义task中的doFirst和doLast方法)
参考:https://www.jianshu.com/p/b9b5acf24bb6

2.使用task

2.1 声明动作

  动作包含doFirst ,doLast

task printlnVersion01{
		doFirst{
 			println ' prilnt verison firstly: $version'
 		} 
	    doLast{
		  println ' prilnt verison last: $version'
		}
}
//doLast也可以这样表示
task  printlnVersion02 << {    //  ’<<’ 优点追加的感觉
      println ' prilnt verison last: $version'
 }
//也可以给现有的任务添加动作
printlnVersion02.doFirst{
        println ' prilnt verison firstly: $version'
}

2.2 访问DefaultTask属性

2.2.1 logger属性

gradle提供了基于SLF4J日志库的logger实现,可以直接在脚本中使用logger属性

task  printlnVersion02 << {   
      logger.info(' prilnt verison last: $version')
 }
2.2.2 group和description属性
//作为参数赋值
task printVersion(group: 'versioning',description:'println version') << {
    logger.info(' print verison last: $version')
}
//或者使用setter方法
task printVersion{
    group ='versioning'
    description= 'print version'
    logger.info(' print verison last: $version')
}

2.3 定义task依赖

使用dependsOn来实现,gradle不能保证多个依赖的执行顺序

//多个依赖
task first << {println "first"}
task second << {println "second"}

task printlnVersion(dependsOn :[second,first]) <<{  //这里依赖的first,second不是看这里的顺序,
    logger.quiet("print version")
}
//单个依赖
task third << {println "first"}
third.denpendsOn('printlnVersion')

2.4 终结器task

常用来在所以来的task执行完后清理资源使用


task first << {println "first"}
task second << {println "second"}

second.finalizedBy first   //在执行了second后执行first

2.5 理解task配置

  声明的task没有使用doFirst ,doLast或者‘<<’的都是task配置,这个task配置是在配置阶段构建。

2.6 声明task的inputs和outputs

  gradle通过比较两个构建的task的inputs和outputs来决定task是否是最新的
,并且只有task的inputs和outputs是不同的,task任务才会执行。

注意点: inputs和outputs是在配置阶段生效,不能使用在执行阶段代码中。如果要在执行代码中使用,可以通过TaskOutputs上的upToDateWhen(Closure)方法来访问,如果闭包放回true,这个task被认为是最新的

2.5 编写自定义的task类

可以通过继承DefaultTask类来实现

2.6 挂接到构建的生命周期上

如下简单的挂接,当然还有很多,建议看官网
在这里插入图片描述

2.7 实现task执行图监听器

可以简单的实现TaskExecutionGraphListener接口,实现graphPopulated方法
并把这个实例注册到task图中去。建议看官网

猜你喜欢

转载自blog.csdn.net/weixin_40792878/article/details/85220447