Table of Contents
官方文档
Features
- Declarative builds and build-by-convention
- Language for dependency based programming
- Structure your build
- Deep API
- Gradle scales
- Multi-project builds
- Many ways to manage your dependencies
- Gradle is the first build integration tool
- Ease of migration
- Groovy
Gradle使用的编程语言是Groovy。 - The Gradle wrapper
安装Gradle
在命令行中使用Gradle
task compile {
doLast {
println 'compiling source'
}
}
task compileTest(dependsOn: compile) {
doLast {
println 'compiling unit tests'
}
}
task test(dependsOn: [compile, compileTest]) {
doLast {
println 'running unit tests'
}
}
task dist(dependsOn: [compile, test]) {
doLast {
println 'building the distribution'
}
}
- 想要运行某个task时,直接输命令:
gradle taskname
。gradle会按照task的依赖关系按顺序执行需要运行的task。 gradle task1 -x task2
表示执行task1及其依赖的task,但是不执行task2。--continue
选项则表示遇到错误不要停止而是继续执行该执行的task。- 在命令行中输入task的名字时不需要输全名,可以只输入足够的可以唯一确定task的开头几个字母,或者只输入驼峰式的名字的开头字母(比如用cT表示compileTest)。
- 使用
-b
选项选择要使用的gradle文件。执行gradle命令时,默认在当前目录寻找build.gradle文件,不过我们可以用-b
选项手动指定一个gradle文件。当用-b
选项指定gradle文件时,settings.gradle失效。 - 类似make的工作原理,gralde在执行某些task时可能会根据依赖关系认为不需要真的去跑这个task,为了强制地重新跑这种task,需要加上
--rerun-tasks
选项。 -q
选项不输出一些不重要的信息,安静模式。gradle projects
输出子工程。gradle tasks
列出所有的task。gradle tasks --all
更进一步地列出了一些依赖的task。gradle help --task taskname
列出taskname这个task的相关信息。gradle dependencies
列出工程的依赖关系。gradle buildEnvironment
列出gradle脚本的依赖关系。gradle properties
列出工程属性--profile
选项,添加用时统计,进行profiling。-m
选项,类似于查看某个task的依赖关系。
Gradle Wrapper
有时用户可能没有装gradle或者装的gradle版本不符合要求,gradle wrapper文件就是用来解决这种问题的。
生成gradle wrapper
- 通过命令生成:
gradle wrapper --gradle-version 2.0
。 - 通过在build.gradle中添加一个Wrapper task,然后执行这个task生成:
task wrapper(type: Wrapper) { gradleVersion = '2.0' }
生成了所谓的gradle wrapper之后,项目文件夹内会多出以下文件:
gradlew(Unix Shell script)
gradlew.bat(Windows batch file)
gradle/wrapper/
gradle-wrapper.jar(Wrapper JAR)
gradle-wrapper.properties(Wrapper properties)
有了gradle wrapper之后,在运行相应的task的时候,就不再用gradle命令而改为gradlew或者gradlew.bat命令。相应的gradle版本会被下载到目录*$USER_HOME/.gradle/wrapper/dists*。
对于gradle.properties这个文件,我们可以修改其中的gradle文件的下载地址,添加下载时可能需要的认证过程的用户名和密码,或者设置要下载的gradle版本的SHA-256值。具体操作见官方文档第6章。
Gradle Daemon
gradle程序每次启动时都要初始化JVM和载入一堆相应的库,这些操作都需要花费相当的时间,我们可以通过在后台跑一个一直在运行着的gradle守护进程来减少这样的启动时间的消耗,提高gradle的执行效率。不过这个gradle daemon功能是从3.0版本才开始有的,具体相关用法查看官方文档第7章。
gradle的依赖管理
依赖主要包含两部分:
- dependencies
为了构建或者运行项目而需要的东西(incoming); - publications
项目的产出,会拿来发布或者上传的东西(outgoing);
dependencies resolution;transitive dependencies;
声明依赖
声明依赖的简单例子:
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.+'
}
依赖配置(Dependency configurations)
一个依赖配置是指的一个有名字的依赖和artifacts的集合。依赖配置的作用:
- 声明依赖
- 解决依赖
- 暴露接口?(Exposing Artifacts for Consumption)
The plugin uses configurations to define what artifacts it generates for other projects to consume。
几种由Java Library Plugin定义好的依赖配置:
- implementation
- runtimeClasspath
- apiElements
关于Java Library Plugin提供的更多配置及细节、以及更多的Plugin和相应的配置细节。
声明外部依赖
例子:
dependencies {
compile group: 'org.hibernate', name: 'hibernate-core', version: '3.6.7.Final'
}
简化版:
dependencies {
compile 'org.hibernate:hibernate-core:3.6.7.Final'
}
仓库(Repositories)
repositories {
mavenCentral()
}
repositories {
jcenter()
}
repositories {
maven {
url "http://repo.mycompany.com/maven2"
}
}
repositories {
ivy {
url "http://repo.mycompany.com/repo"
}
}
repositories {
ivy {
// URL can refer to a local directory
url "../local-repo"
}
}
一个项目可以配置多个仓库,Gradle会按顺序挨着在这些仓库寻找依赖,直到找到需要的依赖。
发布作品(Publishing artifacts)
上传到Ivy repository:
uploadArchives {
repositories {
ivy {
credentials {
username "username"
password "pw"
}
url "http://repo.mycompany.com"
}
}
}
或者上传到Maven repository:
apply plugin: 'maven'
uploadArchives {
repositories {
mavenDeployer {
repository(url: "file://localhost/tmp/myRepo/")
}
}
}
多项目工程的构建
多项目工程构建的结构(Structure of a multi-project build)
这样的构建一般具有如下特点:
- 在根目录或者master目录里有一个settings.gradle文件
- 在根目录或者master目录里有一个build.gradle文件
- 在子目录中有着各自的的*.gradle文件。
settings.gradle文件告诉Gralde次项目是如何与子项目联系在一起的。可以通过读这个文件或者运行gradle -q projects
命令来了解项目与子项目的结构。
一个输出示例:
> gradle -q projects
------------------------------------------------------------
Root project
------------------------------------------------------------
Root project 'multiproject'
+--- Project ':api'
+--- Project ':services'
| +--- Project ':services:shared'
| \--- Project ':services:webservice'
\--- Project ':shared'
To see a list of the tasks of a project, run gradle <project-path>:tasks
For example, try running gradle :api:tasks
执行多项目工程的构建
- cd到子项目目录里,然后按照一般的项目执行task的方式,用
gradle <task>
命令执行task。但是需要注意的是,gradle会执行当前目录及其子目录所包含项目的所有名为task的task。 - 在根目录使用完整的task的名字执行task:
gradle :services:webservice:build
。
持续构建(Continuous build)
持续构建是还在发展中的特性,Gradle还没有完善地实现这一功能特性。
持续构建:对于一个构建目标/请求,Gradle能够不断地检测之前的构建是否过期,如果过期就执行相应的构建操作。
有空再来读这官方文档的第10章。
组合构建(Composite build)
构建环境的设置
主要是通过修改gradle.properties这个文件来配置构建环境。
构建缓存(Build Cache)
编写Gradle脚本
由于这部分内容太多,所以重新写一篇吧来描述这部分内容。
近期评论