Gradle
安装Gradle
- 安装JDK,Gradle 需要运行在一个 Java 环境里
- Gradle 自带 Groovy 库,所以没必要安装 Groovy. 任何已经安装的 Groovy 会被 Gradle 忽略。
- 去官网下载zip包,解压到一个目录。
3.1 如果是Windows系统:设置GRADLE_HOME环境变量,然后在Path环境变量中加入GRADLE_HOME/bin
3.2 如果是Linux系统:设置 ~/.bash_profile 的PATH:export PATH=$PATH:/home/installPackage/gradle/gradle-4.10.2/bin
- 测试:gradle -v,输出一下结果代表安装成功了
```
Gradle 4.8 – ———————————————————- Build time: 2018-06-04 10:39:58 UTC Revision: 9e1261240e412cbf61a5e3a5ab734f232b2f887d
Groovy: 2.4.12 Ant: Apache Ant(TM) version 1.9.11 compiled on March 23 2018 JVM: 1.8.0_181 (Oracle Corporation 25.181-b13) OS: Windows 10 10.0 amd64 ``` —
构建脚本基础
- Projects(项目) 和 tasks(任务)
- Hello world:你可以通过 gradle 命令运行一个 Gradle 构建.gradle 命令会在当前目录中查找一个叫 build.gradle 的文件. 我们称这个 build.gradle 文件为一个构建脚本 (build script), 但是严格来说它是一个构建配置脚本 (build configuration script).这个脚本定义了一个 project 和它的 tasks
task hello{ doLast { println 'Hello world!' } }
执行 gradle -q hello, 那么命令行就会输出 Hello world!
- 快捷的任务定义,利用 « 来代替doLast
task hello << { println 'Hello world!' }
- 构建脚本代码
task upper << { String someString = 'mY_nAmE' println "Original: " + someString println "Upper case: " + someString.toUpperCase() }
- 任务依赖
task hello << { println 'Hello world!' } task intro(dependsOn: hello) << { println "I'm Gradle" }
执行:gradle -q intro 输出:
Hello world! I'm Gradle
- 动态任务
4.times { counter -> task "task$counter" << { println "I'm task number $counter" } }
执行:gradle -q task0 -> I’m task number 1
执行:gradle -q task2 -> I’m task number 2
- 使用已经存在的任务
4.times { counter -> task "task$counter" << { println "I'm task number $counter" } } task0.dependsOn task2, task3
执行:gradle -q task0:输出
I'm task number 2 I'm task number 3 I'm task number 0
– 给一个已经存在的任务加入行为.
task hello << { println 'Hello Earth' } hello.doFirst { println 'Hello Venus' } hello.doLast { println 'Hello Mars' } hello << { println 'Hello Jupiter' }
执行:gradle -q task0:输出
Hello Venus Hello Earth Hello Mars Hello Jupiter
- 自定义任务属性
task myTask { ext.myProperty = "myValue" } task printTaskProperties << { println myTask.myProperty }
执行:gradle -q printTaskProperties:输出 -> myValue
- 默认任务
defaultTasks 'clean', 'run' task clean << { println 'Default Cleaning!' } task run << { println 'Default Running!' } task other << { println "I'm not a default task!" }
执行:gradle -q 默认执行clean和run
- 通过 DAG 配置
task distribution << { println "We build the zip with version=$version" } task release(dependsOn: 'distribution') << { println 'We release now' } gradle.taskGraph.whenReady {taskGraph -> if (taskGraph.hasTask(release)) { version = '1.0' } else { version = '1.0-SNAPSHOT' } }
执行:gradle -q distribution 输出:We build the zip with version=1.0-SNAPSHOT
执行:gradle -q release 输出:
We build the zip with version=1.0
We release now - 外部依赖,加入Maven仓库
/*指定仓库为Maven仓库*/ repositories { mavenCentral() } /*依赖包*/ dependencies { compile group: 'commons-collections', name: 'commons-collections', version: '3.2' testCompile group: 'junit', name: 'junit', version: '4.+' }
- 定制项目:定制 MANIFEST.MF 文件
sourceCompatibility = 1.8 targetCompatibility = 1.8 version = '1.0' jar { manifest { attributes 'Implementation-Title': 'Gradle Quickstart', 'Implementation-Version': version } }
- 发布 JAR 文件
uploadArchives { repositories { flatDir { dirs 'repos' } } }
依赖管理的基础知识
- 什么是依赖管理
- Gradle需要了解你的项目需要构建或运行的东西,以便找到它们.我们称这些传入的文件为项目的 dependencies(依赖项).
- Gradle需要构建并上传你的项目产生的东西.我们称这些传出的项目文件为 publications(发布项).
- 声明你的依赖
apply plugin: 'java' repositories { mavenCentral() } dependencies { compile group: 'org.hibernate', name: 'hibernate-core', version: '3.6.7.Final' testCompile group: 'junit', name: 'junit', version: '4.+' }
- 依赖配置
- compile 用来编译项目源代码的依赖.
- runtime 在运行时被生成的类使用的依赖. 默认的, 也包含了编译时的依赖.
- testCompile 编译测试代码的依赖. 默认的, 包含生成的类运行所需的依赖和编译源代码的依赖.
- testRuntime 运行测试所需要的依赖. 默认的, 包含上面三个依赖
- 外部的依赖
- 仓库
-
发布 artifacts
编写构建脚本
- 标准项目属性:Project 对象提供了一些标准的属性, 您可以在构建脚本中很方便的使用他们. 下面列出了常用的属性
Name | Type | Default Value |
---|---|---|
project | Project | Project 实例对象 |
name | String | 项目目录的名称 |
path | String | 项目的绝对路径 |
description | String | 项目描述 |
projectDir | File | 包含构建脚本的目录 |
build | File | projectDir/build |
group | Object | 未具体说明 |
version | Object | 未具体说明 |
ant | AntBuilder | Ant实例对象 |
- 声明变量
2.1. 局部变量:局部变量使用关键字 def 来声明, 其只在声明它的地方可见
def dest = "dest" task copy(type: Copy) { from "source" into dest }
2.2. 扩展属性:使用 ext 来定义
apply plugin: "java" ext { springVersion = "3.1.0.RELEASE" emailNotification = "build@master.org" } sourceSets.all { ext.purpose = null } sourceSets { main { purpose = "production" } test { purpose = "test" } plugin { purpose = "production" } } task printProperties << { println springVersion println emailNotification sourceSets.matching { it.purpose == "production" }.each { println it.name } }
Gradle常用命令
apply plugin: ‘java’,加入了java插件
- gradle build :Gradle 将会编译和测试你的代码,并生成一个包含所有类与资源的 JAR 文件
- gradle clean :删除 build 目录和所有为build生成的文件
- gradle assemble :编译并打包你的代码, 但是并不运行单元测试.其他插件会在这个任务里加入更多的步骤.举个例子,如果你使用 War 插件,这个任务还将根据你的项目生成一个 WAR 文件
- gradle check :编译并测试你的代码. 其他的插件会加入更多的检查步骤.举个例子, 如果你使用 checkstyle 插件, 这个任务将会运行 Checkstyle 来检查你的代码.
- 选择执行构建:gradle -q -b subdir/myproject.gradle hello 执行myproject.gradle 文件中的 hello task(可以使用-p参数来代替-b参数)
- gradle projects :列出项目列表
- gradle -q tasks [-all] :列出所有的任务列表,如果加入-all参数,则会输出更多的人物信息
- gradle -q help –task someTask :获取someTask的任务的具体信息
- gradle -q dependencies :获取依赖信息
- gradle properties :获取项目属性列表,如:gradle -q api:properties 获取api项目的属性信息
- gradle hello –profile :–profile 参数可以收集一些构建期间的信息并保存到 build/reports/profile 目录下. 并且会以构建时间命名这些文件
- gradle –gui :打开Gradle的图形用户界面