gradleAPI介绍

来源:互联网 发布:淘宝做分销有成功的吗 编辑:程序博客网 时间:2024/06/18 17:26

Gradle 构建块
基本模块project、task、property。

Project接口描述
代表一个正在构建的组件,如jar文件,或者一个目标,如部署应用程序。构建进程启动后Gradle基于build.gradle配置实例化Project类,其API接口及其重要方法如下:[org.gradle.api.Project]

构建脚本配置    apply(options:Map)    buildscript(config:Closure)依赖管理    dependencies(config:Closure)    configurations(config:Closure)    getDependencies()    getConfigrations()getter/setter属性    ant    name    description    group    path    version    logger创建文件    file(path:Object)    file(path:Object...)    fileTree(baseDir:Object)创建task    task()任务接口task    任务动作和任务依赖

Task接口描述 org.gradle.api.Task,代表一个执行的任务。
task依赖
dependsOn(tasks:Object…)

动作定义    doFirst(action :Closure)    doLast(action:Closure)    getActions()输入输出数据声明    getInputs()    getOutputs()getter和setter属性    getAnt()    getDescription()    getEnabled()    getGroup()    setDescription(description:String)    setEnabled(setabled:boolean)    setGroup(group:String);

属性:任务或项目的描述,如何扩展属性呢,属性以k-v形式存储,添加属性需要使用ext命名空间。

project.ext.myPro= 'myValue'ext{    name = 'zhao';    age = 11;}当然Gradle属性可以通过gradle.properites文件中声明直接添加到项目。    一般位于<USER_HOME>/.gradle 或者项目根目录下。    前面的方式大多用来声明自定义变量,Gradle也提供了很多其他方式为构建提供属性,例如:    项目属性通过-P 命令行选项提供    系统属性通过-D 命令行选项提供    环境属性可以参考如下模式提供ORG_GRADLE_PROJECT_myproper=myValue

task动作
action是在task中合适的地方放置构建逻辑,Task提供了两个相关的方法来声明task动作,doFirst(Closure)和doLast(Closure),当task被执行,动作逻辑被定义为闭包参数被依次执行。

Gradle 构建生命周期阶段
任何时候执行Gradle构建,都会运行三个不同的生命周期阶段:

初始化    gradle为项目创建Project实例配置    gradle构造了模型来表示任务,并参与到构建中,增量式构建特性决定了模型中的task是否需要被运行,每一次构建,任何配置代码都被执行。执行    task安装依赖被一次执行。声明task的inputs和outputs通过这两个属性,来决定任务是否是最新的。task的inputs和outpus是在配置阶段执行的用来连接task依赖。这就需要在配置块中被定义的原因,确保inputs和outputs的值在配置期是可以访问的。若需要编程获得输出,那么可以通过TaskOutputs上的upToDateWhen(Closure)方法来实现,与常规的inputs和outputs相比,这个方法是在执行期间执行。若闭包返回true,则task会被认为是最新的。通过version的属性文件,读取项目版本```task printVersion1{    doLast{    group='version'    description='print version'//        version = new ProjectVersion(1,0,true);    logger.quiet "Version $version";    }}class ProjectVersion{    Integer major;    Integer minor;    Boolean release;    ProjectVersion(Integer ma,Integer mi,Boolean rel){    this.major=ma;    this.minor=mi;    this.release = rel;    }    String toString(){    "$major . $minor $release";    }}ext{    versionFile=file('version.properties');}ProjectVersion readVersion(){    logger.quiet 'read version from version.properties';    if(!versionFile.exists()){    throw new Exception("version.proversion not exists");    }    Properties properties = new Properties()    versionFile.withInputStream{    stream ->        properties.load(stream);    }    new ProjectVersion(properties.major.toInteger(),properties.minor.toInteger(),properties.release.toBoolean());}task loadVersion{    project.version=readVersion();}//通过ant操作属性文件task makeRelease{    inputs.property('release',version.release);    outputs.file versionFile;    doLast(){    version.release=true;    ant.propertyfile(file:versionFile){        entry(key:'release',type:'string',operation:'=',value:'true');    }    }}```
原创粉丝点击