Gradle构建项目深入浅出
Gradle构建项目深入浅出
Kotlin in Action
文章目录
- 系列文章目录
- 前言
- 一、gradle安装及入门使用
- 二、gradle的project和task
- 三、gradle的依赖管理
- 五、gradle增量式更新任务
- 六、gradle常用插件
- 七、gradle依赖冲突
- 八、gradle插件自定义扩展
- 九、gradle调用外部扩展
- 总结
前言
这里主要记录基于Kotlin的Gradle构建工程的基本使用和Gradle的基本性质及优势
提示:以下是本篇文章正文内容,下面案例可供参考
一、什么是Gradle?
Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化构建开源工具。它使用一种基于Groovy的特定领域语言(DSL)来声明项目设置,抛弃了基于XML的各种繁琐配置。面向Java应用为主。当前其支持的语言限于Java、Groovy、Kotlin和Scala。
二、gradle安装及入门使用
1.下载位置:www.gradle.org
2.安装过程:将压缩文件解压,并添加环境变量
3.测试安装:打开CMD键入gradle,见如下图说明安装成功
入门使用(基于kotlin构建项目):
1.创建工程:
2.修改配置文件:
3.测试运行:
三、gradle的project和task
1.概述:
Gradle中的所有内容都基于两个基本概念:项目(Project)和任务(Task)。每个Gradle构建都是由一个或多个project组成。每个project都是有一个或者多个任务组成。任务之间具有依赖关系,保证了任务的执行顺序。任务代表构建执行的一些原子工作。
2.project:
我们首先讲一下Project的概念。每个build.gradle 就对应一个project。构建中的每一个project,Gradle都会创建一个Project对象,并将这个对象与构建脚本相关联。简单的说,build.gradle是对一个Project对象的配置。以Android项目为例,在项目的根目录会有一个build.gradle文件,在每个模块的目录下也会有一个build.gradle 文件。
3.Task及Task生命周期:
任务是主要的工作执行者。每个任务有多个Action组成。
Task生命周期分为:扫描和执行两个过程
var name = "uname"//扫描时执行
doFirst{}//运行时执行
doLast{}//运行时执行
4.基本使用及依赖关系:
task("task1"){doFirst{println("this is task 1")}
}
task("task2"){doFirst{println("this is task 2")}
}.dependsOn("task1")
task("task3"){doFirst{println("this is task 3")}
}.dependsOn("task2")
四、gradle的依赖管理:
依赖管理(在 build.gradle 中):
1、定义依赖仓库(repositories):
Gradle 要求至少定义一个依赖仓库,依赖仓库可以是文件系统,也可以是中心服务器。最常用的是 jcenter 和 mavenCentral。
2、申明依赖(dependencies):
和 Maven 类似,依赖的坐标直接为:group、name、version。此外,引入不同的插件会引入不同的依赖配置类别。
/*** Gradle代码:* 使用HttpClient为例添加依赖管理*/
repositories {mavenCentral()jcenter()
}
dependencies{compile(kotlin("stdlib"))//compile group: 'org.apache.httpcomponents', name: 'httpclient', version: '4.4.1'compileOnly("org.apache.httpcomponents","httpclient","4.4.1")
}
五、gradle增量式更新:
如果我们将Gradle的Task看作一个黑盒子,那么我们便可以抽象出输入和输出的概念,一个Task对输入进行操作,然后产生输出。为了提高构建效率,Gradle引入了增量式构建的概念。在增量式构建中,我们为每个Task定义输入(inputs)和输入(outputs),如果在执行一个Task时,如果它的输入和输出与前一次执行时没有发生变化,那么Gradle便会认为该Task是最新的(UP-TO-DATE),因此Gradle将不予执行。一个Task的inputs和outputs可以是一个或多个文件,可以是文件夹,还可以是Project的某个Property,甚至可以是某个闭包所定义的条件。
- inputs.dir()
- inputs.file()
- outputs.dir()
- outputs.file()
task("printfilename"){inputs.dir("src")//输入outputs.files("des.txt")//输出doFirst{var dir = fileTree("src")var des = file("des.txt")des.appendText("")Thread.sleep(3000)dir.forEach{if (it.isFile){des.appendText(it.absolutePath)des.appendText("\r\n")}}}
}
六、gradle常用插件:
插件是包含一个或多个任务的合集
- application插件
- java插件
- war插件
七、gradle依赖冲突:
gradle会自动依赖最高版本的库文件
八、gradle插件自定义扩展:
task("mycopy",Copy::class){from("")into("")
}
task("mydelete",Delete::class){setDelete("")
}
九、gradle调用外部扩展:
/*** 执行一段java代码*/
task("exejava"){javaexec{main = ""classpath()}
}
Gradle构建项目深入浅出相关推荐
- 使用Gradle构建项目
本文由 ImportNew - 唐尤华 翻译自 spweblog.blogspot.com.如需转载本文,请先参见文章末尾处的转载要求. 在最近的Google IO大会上我注意到Android Stu ...
- [Gradle] 在 Eclipse 下利用 gradle 构建系统
构建系统时候常常要用到 Ant, Maven 等工具,对于初学者来说,它们还是过于复杂,上手还是需要时间的.本文将向读者介绍一种全新的构建项目的方式 gradle,它简单.上手快,能大大节省项目的时间 ...
- Gradle构建脚本入门
黄少存,叩丁狼高级讲师,本文为原创文章,转载请注明出处. 上一篇咱们已经知道了Gradle构建脚本的重要性,要使用比较复杂的项目构建就需要来书写构建脚本,那Gradle 的构建脚本有哪些呢,请看构 ...
- Gradle 构建速度优化
构建速度优化 AS编译太慢是我们经常吐槽的,我们该做些什么来加快编译的速度呢?前面我们简单的了解了gradle构建项目的流程.我们可以从以下几个方面来做: 注意AS配置: 如及时更新Gradle和JD ...
- 【业余开发笔记】用gradle构建一个简单的rest api
以下是一些gradle构建项目的使用笔记,由于自己对maven也算太了解,所以不谈区别和优劣了,就简单总结一下关于gradle的使用好了. 以下是关于用gradle构建一个以spring boot为框 ...
- 在k8s中使用gradle构建java web项目镜像Dockerfile
在k8s中使用gradle构建java web项目镜像Dockerfile FROM gradle:6-jdk8 AS build COPY --chown=gradle:gradle . /home ...
- Spring Boot-Spring Tool Suit + Gradle 构建第一个Spring Boot 项目02
概述 将工程托管到Github Gradle构建 为什么一个main函数就能启动web并提供这么多功能 幕后的 Spring Boot 分发器和 multipart 配置 视图解析器.静态资源以及区域 ...
- Spring Boot-Spring Tool Suit + Gradle 构建第一个Spring Boot 项目01
文章目录 概述 使用Spring Tool Suite构建Spring Boot项目 下载STS 插件安装 搭建第一个Spring Boot项目 启动项目 概述 通常,构建一个Spring Boot项 ...
- Android Studio目录结构和Gradle构建Android项目
一,Android Studio的目录结构和工程项目介绍 二,Eclipse工程与Android Studio工程的区别 1,Eclipse工程能导入AS运行,但AS建立的工程不能再Eclipse中运 ...
最新文章
- 1.1 计算机的发展
- 科大星云诗社动态20210319
- spring声明事务与编程事务概述
- python打包成.exe程序
- 笨人可以学计算机吗,为什么有的笨人一旦开窍,其人生就像开了挂似的呢?
- 前端学习(2956):项目中组件的本地注册
- Redis 巧用数据类型实现亿级数据统计
- 企业邮箱及邮件服务器架设
- Ajax网络超时和和网络异常
- Android ADB动态查看内存信息之Watch使用
- MFC Windows 程序设计[五]之绘制表格Accel
- Python中写入文件操作
- r720支持多少频率的内存吗_二维码门禁你知道支持多少种识别方式吗?
- 硅谷之行 (15) Fremont观豪宅
- Oracle数据库递归查询
- 计算机等级考试四级 网络工程师 之 操作系统原理1 适合懒人备考哈哈哈
- Linux 文件的属性
- Serverlet 介绍
- 网易游戏AI Lab招聘计算机视觉日常实习生
- 寻址 far near