gradleAPI介绍

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文件中声明直接添加到项目。
    一般位于/.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');
    }
    }
}


```

你可能感兴趣的:(gradle)