一.Gradle执行流程

  1.Gradle的执行流程(生命周期)主要是三个阶段:

    初始化阶段:解析整个工程中所有Project,构建所有的Project对应的project对象

    配置阶段:解析所有的projects对象中的task,构件号所有的task的拓扑图

    执行阶段:执行具体的task及其依赖task

  2.Gradle执行流程的监听:

    在settings.gradle中打印一句话(Gradle初始化阶段会执行settings.gradle文件)

println "初始化阶段开始执行"

    在build.gradle中配置监听,这几个监听本质还是回调方法,添加代码如下

//配置阶段开始前进行监听
this.beforeEvaluate {//等效与this.gradle.beforeProject
println "配置阶段执行前"//注意:直接这样配置是不会生效的,因为Project还没配置好,但它可以在父工程的中配置对子模块阶段的监听
 }
//配置阶段完成后进行监听
this.afterEvaluate {//等效与this.gradle.afterProject println
  "配置阶段完成后"
}
//执行阶段完毕后进行监听
this.gradle.buildFinished {
  println "执行阶段完毕后"
}

    测试:在控制台中输入gradle clean,输出如下

    

二.Project

  1.对于Gradle来说,Gradle项目中的父工程是一个Project,但每一个子模块也是一个Project(只要有build.gradle文件,都算是Project),可以输入gradle projects查看整个项目中的Project。或者编写如下代码,并执行Gradle任务

//获取全部Project
this.getProjects()
def getProjects(){
println this.getAllprojects()//获取当前模块及其子模块的Project
}

  2.父Project对子Project的操作,例如在父Project中的build.gradle中配置子Project的组名,版本号,依赖等(如果在父Project中配置了,子Project中不需要再配置)

project('gradle-study-child'){
group ''
version ''
dependencies{ }
}

  3.如果需要配置父Project及所有子Project,可以使用allproject,如果只需配置所有的子Project,可以使用subproject

allproject{
//略
}

  4.文件属性

    在gradle中,可以通过apply from导入外部文件配置,除此以外,还有很多与文件相关的操作,

    1.获取路径

println getProjectDir().absolutePath//获取Project路径
println getBuildDir().absolutePath//获取build文件夹路径
println getRootDir().absolutePath//获取工程根路路径

    2.获取文件

def findFile(String filePath){
def file = file(filePath)//获取指定路径的文件
return file.text//返回文件内容
}

    3.拷贝文件

copy{
from file('test.txt')//源文件路径
into getBuildDir()//拷贝后的路径
rename{}//重命名拷贝后的文件
}

    4.依赖相关

buildscript {
//配置工程的仓库地址
repositories {
mavenCentral()//使用maven中央仓库
mavenLocal()//使用maven本地仓库
//更多方法可以查看API文档
}
//配置工程的插件依赖地址
dependencies {}
}

    更多Project相关内容可以在API上查看

三.Task

  1.Task是gradle构建脚本的一个运行单元,可以通过gradle tasks查看Project中的全部Task

  2.Task的创建

task mytask(){//括号中可以添加Task分组,描述信息等
println "创建一个Task"
}

  3.Task的执行阶段

    在Task中,使用doFirst和doLast可以控制Task执行流程,前者在Task中最早执行,后者则是最后执行(两者都执行于Gradle执行阶段)

  4.Task依赖

task otherTask(dependsOn: [mytask]){//Task可以依赖其他Task
println "新的Task执行了"
}

    注意:被依赖的Task会在该Task之前执行一次(该方法可用于决定各个Task执行的先后顺序)

【项目构建工具】 Gradle笔记2的更多相关文章

  1. 项目构建工具Gradle的使用入门(参考,只表明地址)

    Gradle入门介绍:简介 http://blog.jobbole.com/71999/ Gradle入门介绍:第一个Java项目 http://blog.jobbole.com/72558/ Gra ...

  2. 项目构建工具gradle

    1.安装 https://gradle.org/install 2.构建一个项目 https://guides.gradle.org/creating-new-gradle-builds/ 3.bui ...

  3. Gradle项目构建工具学习笔记(持续更新中。。。)

    1.gradle的安装 1)从官网下载gradle,然后解压 2)在系统环境变量新建GRADLE_HOME 3)将%GRADLE_HOME%\bin加入PATH中 2.验证是否安装成功 gradle ...

  4. java之项目构建工具Gradle

    介绍 Java 作为一门世界级主流编程语言,有一款高效易用的项目管理工具是 java 开发者共同追求的心愿和目标.显示 2000 年的 Ant,后有 2004 年的 Maven 两个工具的诞生,都在 ...

  5. 【项目构建工具】 Gradle笔记1

    一.Gradle简介 Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化构建开源工具.它使用一种基于Groovy的特定领域语言(DSL)来声明项目设置,抛弃了基于XM ...

  6. Java项目工程化之项目构建工具Maven

    欢迎查看Java开发之上帝之眼系列教程,如果您正在为Java后端庞大的体系所困扰,如果您正在为各种繁出不穷的技术和各种框架所迷茫,那么本系列文章将带您窥探Java庞大的体系.本系列教程希望您能站在上帝 ...

  7. 构建工具Gradle

    1.Summary   从Android团队开始宣布放弃Eclipse转投Android Studio时,构建工具Gradle进入了Android开发者的视野.而随着热修复.插件化.编译时注解的流行, ...

  8. 取代 Maven?这款项目构建工具性能提升 300%

    在 GitHub 上闲逛的时候,发现了一个新的项目:maven-mvnd,持续霸占 GitHub trending 榜单好几天了. maven-mvnd,可以读作 Maven Daemon,译作 Ma ...

  9. 前端项目构建工具---Grunt

    什么是Grunt? grunt是javascript项目构建工具,在grunt流行之前,前端项目的构建打包大多数使用ant.(ant具体使用 可以google),但ant对于前端而言,存在不友好,执行 ...

  10. Gulp.js - 简单、直观的自动化项目构建工具

    Gulp.js 是一个简单.直观的构建系统.崇尚代码优于配置,使复杂的任务更好管理.通过结合 NodeJS 的数据流的能力,你能够快速构建.通过简单的 API 接口,只需几步就能搭建起自己的自动化项目 ...

随机推荐

  1. windos批处理启动redis与哨兵

    为各个启动单独建立脚本后用总的bat调用 创建脚本,redis6379.bat脚本内容:@echo offtitle redis-serverset ENV_HOME6379="G:\Red ...

  2. git远程删除分支后,本地执行git branch -a依然能看到删除分支到底该咋整?

    使用命令git branch -a可以查看所有本地分支和远程分支(git branch -r 可以只查看远程分支) 如果发现很多在远程仓库已经删除的分支在本地依然可以看到到底该怎么办呢?(反正强迫症受 ...

  3. 利用Viewpager和Fragment实现UI框架的搭建实现

    package com.loaderman.uiframedemo; import android.os.Bundle; import android.support.v4.app.Fragment; ...

  4. matplotlib之条形图

    1.知识点 1.plt.figure(figsize=(20,8),dpi=80)设置图像大小,主要参数为figsize(a,b) 2.plt.barh(range(len(a)),b,height= ...

  5. UFIDA

    充分匹配了‘用友’的中文品牌的含义,即‘与用户真诚合作,做用户可靠朋友’.其中‘U’代表‘User’,即用户:‘FID’表示忠诚.信任,来源于 Fidelity(诚实)等英文词的词根:助音词‘A’放在 ...

  6. H5中调起微信这么实现,如果未安装则提示未安装

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta name ...

  7. moby、docker-ce与docker-ee的区别

    近期研究docker相关技术,发现官网分为moby.docker-ce与docker-ee不同板块,ce和ee版本好理解,但2017年开始又多出个Moby,开始有点凌乱,Google出如下解释,mar ...

  8. 【机器学习理论】概率论与数理统计--假设检验,卡方检验,t检验,F检验,方差分析

    显著性水平α与P值: 1.显著性水平是估计总体参数落在某一区间内,可能犯错误的概率,用α表示. 显著性是对差异的程度而言的,是在进行假设检验前确定的一个可允许作为判断界限的小概率标准. 2.P值是用来 ...

  9. 应用安全 - 编程语言 | 框架 - PHP - Djiango - 漏洞 -汇总

    CVE-2007-0404 Date , 类型Filename validation issue in translation framework. Full description 影响范围 CVE ...

  10. stack smashing detected解决过程

    在执行程序结束return 0 之后出现上图问题.主要原因是在程序中存在数组越界. 解决方法: 1. 查看定义的结构体内buffer大小,为4096字节 typedef struct { UINT32 ...