项目构建工具Gradle详解
来源:互联网 发布:linux 安装gzip 编辑:程序博客网 时间:2024/06/04 19:39
1、Gradle介绍
简单的说,Gradle就是用来构建项目的一个工具。
- 基于JVM
- 像Ant一样通用灵活
- 像Maven一样约定优于配置
- 支持多工程构建
- 强大的依赖管理(基于Apache Ivy)
- 对已有的maven和ivy仓库全面支持
- 支持传递性依赖管理,在不需要远程仓库和pom.xml和ivy配置文件的前提下
- 基于groovy脚本构建,其build脚本使用groovy语言编写
2、Ant、Maven、Gradle比较
创世之初,世上只有Make一种构建工具,后来,其发展为GNU Make。后来由于技术的不断发展,JVM生态圈里出现了三个最流行的构建工具:
- Ant
Ant是第一个“现代”构建工具,在很多方面它有些像Make。
Ant的优点是上手比较快,对构建过程的控制直观透明。
Ant的不足在于使用XML作为脚本编写格式,XML本质是层次化的,并不能很好地贴合Ant过程化编程的初衷,在Ant里要表达一个if分支持功能非常的麻烦;项目一大起来,XML文件很快大的无法管理。
Ant一开始没有通过网络进行依赖管理的功能,直到采用了Apache Ivy。 - Maven
Maven主要聚焦于依赖管理,实际上用Maven很难写出复杂、定制化的构建脚本,甚至不如Ant。
用XML写的配置文件会变得越来越大,越来越笨重。
Maven的主要优点是生命周期。只要项目基于一定之规,它的整个生命周期都能够轻松搞定,代价是牺牲了灵活性。 - Gradle
Gradle结合了前两者的优点,在此基础之上做了很多改进。它具有Ant的强大和灵活,又有Maven的生命周期管理且易于使用。
Gradle不用XML,它使用基于Groovy的专门的DSL,从而使Gradle构建脚本变得比用Ant和Maven写的要简洁清晰。
它使用Apache Ivy来处理Jar包的依赖。
Gradle的成就可以概括为:约定好,灵活性也高。
3、Gradle相关的文件
- settings.gradle
这个文件是用来告诉gradle工具你的工程包含了几个模块。
示例:include ':app',':library'
你可以指定模块的路径。
示例:project(':app').projectDir = new File('path')
- gradle-wrapper.properties
这个文件位于工程根目录下的build/wrapper
目录下,通过修改gradle-wrapper.properties
文件中的distributionUrl
,可以指定需要下载的gradle版本;
下载的功能是通过另外一个文件gradle-wrapper.jar
完成的。 - gradle.properties
一个配置文件,里面可以定义一些常量。 - gradlew和gradlew.bat
分别是linux下的shell脚本和windows下的批处理文件,它们的作用是根据gradle-wrapper.properties文件中的distributionUrl下载对应的gradle版本。这样就可以保证在不同的环境下构建时都是使用的统一版本的gradle,即使该环境没有安装gradle也可以,因为gradle wrapper会自动下载对应的gradle版本。 - build.gradle
进行工程打包的一些配置,这里就不赘述了。
4、Gradle任务
1. 创建一个任务
task helloTask{ println '在这里进行任务配置' doFirst{ println '任务执行前做的事' } doLast{ println '任务执行后做的事' }}
2. 任务依赖
假设现在我们已经创建好了TaskA、TaskB、TaskC。
- dependsOn
TaskC dependsOn TaskA, TaskB
这里表示TaskA和TaskB会先执行,然后再执行任务TaskC。
- shouldRunAfter
TaskA和TaskB哪个先执行是不一定的。
taskB.shouldRunAfter TaskA
taskA先于TaskB执行。
- finalizedBy
我们再新建一个任务TaskD。
taskC finalizedBy TaskD
当我们执行任务taskC时,任务的执行顺序是TaskA->TaskB->TaskC->TaskD。
5、Gradle生命周期
先读取settings.gradle
,然后是顶层的build.gradle
,最后是各个模块的build.gradle
。
project.beforeEvaluate { println '在读取build.gradle文件前'}project.afterEvaluate { println '在读取build.gradle文件后'}project.getGradle().addBuildListener(new BuildListener() { @Override void buildStarted(Gradle gradle) { println '构建开始时' } @Override void settingsEvaluated(Settings settings) { println '读取settings.gradle的时候' } @Override void projectsLoaded(Gradle gradle) { println '模块加载时' } @Override void projectsEvaluated(Gradle gradle) { println '读取模块配置时' } @Override void buildFinished(BuildResult buildResult) { println '构建完成时' }})
阅读全文
0 0
- 项目构建工具Gradle详解
- Gradle项目构建工具介绍
- Gradle项目构建工具介绍
- Gradle 自动化构建工具详解
- gradle构建android项目详解
- gradle概述和项目构建工具介绍
- gradle 之新一代项目自动化构建工具
- 自动化构建工具 Gradle
- android gradle构建工具
- Gradle构建工具基础
- gradle 构建工具
- android构建工具gradle
- 项目构建工具Gradle配置及第一个例子
- (1)项目构建工具之Gradle入门
- Gradle构建Android项目
- gradle项目构建
- 加速Gradle构建项目
- Gradle:构建项目
- 生成回文数 --第六届蓝桥杯国赛JAVA C组
- thinkphp导入第三方金山云sdk
- DNS本地解析
- HDU 4417 Super Mario(线段树||树状数组+离线操作 之线段树篇)
- View=android.widget.ZoomButtonsController$Container not attached to window manager
- 项目构建工具Gradle详解
- bat文件和sh文件
- xpath的使用方法以及python爬取数据的保存
- java基础复习--复习总结7
- Qt翻译文件结合VS实现语言切换(多语言国际化)
- Permission denied: user=root, access=WRITE,inode=
- Bundle adjustment-光束法平差介绍
- Android平台一个杀掉由关键字查找到的进程bat脚本
- 再讲*.hbm.xml文件其中的各个节点