1. 认识
★ 简单来说就是一款构建工具。其他构件工具 如 Maven ,Ant.
★ gradle 的特色:
① : 声明式的构建和基于约定的构建 : gradle 的 核心是基于 Groovy 的可扩展的特定领域语言 (DSL:Domain Specific Language)
② : 基于编程的依赖语言
③ : 结构化的构建
④ : Multi-project builds
⑤ : Gradle is the first build integration tool
⑥ : Groovy
2. 安装
★ 首先应保证已经安装 jdk 6 或者以上的版本。
★ gradel 直接下载不需要安装 ,需要配置环境变量 GRADLE_HOME ,并加入到 PATH 环境变量中去。通过 gradle -v 来验证是否配置成功
*: 当然可以不用安装gradle , 可以使用 gradle wrapper 管理 gradle, 下面会有介绍
3. idea(2016.1 ) 创建 gradle 项目流程 (idea 支持 Gradle SDK 1.2 及以后的版本)
① File → new → project → 会出现一个 New Project 的弹出框
② 左侧选择 Gradle → 配置 project SDK(java) 路径 → 选择 apply plugin (选择 java 会集成java 插件 ,选择 web 会集成 ‘war’ 插件) → 点击next
③ 设置项目的 GroupId、ArtifactId 、 Version → 点击 next
④ 选择创建空的目录(会自动创建 java,resource,webapp目录),这里是设置 gradle 的一些细节 → 点击 next
⑤ 显示项目名称、项目地址等 → 点击 finish
关于 idea 的 Gradle Tool Window (通过 view → ToolWindows → Gradle 打开,如果不存在Gradle 则需要关闭项目重新导入项目) 参看 : idea 说明文档:
将 Gradle tasks ,以及 build.gradle 中所做的所有改变全部展示在此 ,每次在 build.gradle 中做完修改需要点击同步按钮进行同步
4. 构建脚本基础
4.1 gradle 中围绕两个基本概念 :
① projects ( 项目 ) : 每个 gradle 的构建 由一个或者多个 project 组成 ,
② tasks (任务) : 每个 project 由一个或者多个 task 组成。
4.2 hello world
gradle 执行 task 的命令行语法如下 :
gradle [task] //使用本地安装的 gradle 执行 task
gradlew [task] // 使用 Wrapper 下载的 gradle 执行task ,使用 gradle Wrapper 方便 gradle 的版本管理 ,需要使用的时候执行命令就可以下载,不需要配置
★完整形式
build.gradle
task hello {
doLast { //doLast 为关键词
println 'Hello world!'
}
}
cmd 中运行
gradle -q hello //-q 相当于静默执行
★简写形式
task hi << {
println 'Hi!'
}
查看 项目中 所有可执行的 task :
gradle -q tasks //-q 静默执行
gradle -q tasks --all
查看项目的依赖 :
gradle -q dependencies //查看 root project 的依赖
gradle -q dependencies module:dependencies //查看 root project 和子项目 module 的依赖
4.4 task 之间的依赖 ( dependsOn: )
task hi << {
println 'hi'
}
task intr(dependsOn: hi) << {
println 'i`m xlchen'
}
4.8 Project API
★ 标准的 project properties
i.e :
build.gradle
println name //项目名称
println path //项目绝对路径
println project.name //项目名称
cmd 中
gradle -q check //输出上面的几个属性
4.10 声明变量 :两种方式
① Local variables : def 关键字定义 ,是 groovy 语言中的一个特色
def dest = "dest"
② extra properties :可以用来集中定义jar 包版本
ext {
springVersion = "3.1.0.release"
email = "xxx@vastio.com"
}
task exttest << {
println springVersion
println email
}
5. 基于已有的脚本 执行
5.1 task
★ 执行多个任务 : 每个任务最多执行一次 :无论是命令行中指定多个,还是很强的依赖
gradle compile test //按顺序执行compile 任务 和 test 任务
★ 不执行某个任务 : -x 或者 --exclude-task [taskName]
gradle dist -x test //不执行test 任务
5.2 The Gradle Wrapper
★ : 可以不用预先安装好 gradle , 便于统一 gradle 版本 ,前提是要集成 gradle wrapper ,由以下几部分组成
· gradlew (Unix shell 脚本)
· gradlew.bat (windows 批处理文件)
· gradle / wrapper / gradle-wrapper.jar (wrapper jar)
·gradle / wrapper / gradle-wrapper.properties (wrapper properties) : 这里记录了项目中使用到的gradle 的版本
★ : 如果项目中已经设置了 wrapper ,可以执行以下命令下载 gradle ,下载的版本记录在 gradle-wrapper.properties 中
①windows
gradlew <task>
如:
gradlew idea //前提是已经集成了 idea 插件 apply plugin 'idea'
② linux / Mac
./gradlew <task>
★ : 修改 gradle 的版本命令
gradle wrapper --gradle-version <version>
i.e : gradle wrapper --gradle-version 2.1
当然也可以在 build.gradle 配置文件中配置task
task wrapper(type: Wrapper){
gradleVersion = '2.0'
}
6 .创建 JVM 项目
引用方式 :
apply plugin:'java'
作用 :
Source sets 的概念 :一起编译并且执行的一组资源文件 ,定义了两种标准的 source sets : main , test;
println sourceSets.main.output.classesDir
println sourceSets['main'].output.classesDir //两个都是输出 java 文件编译后所存放的文件目录
sourceSets.main.output.classesDir = file("bin") //修改输出目录 ,file 为 gradle 的创建文件的 API
编码的设置
compileJava.options.encoding = 'UTF-8'
compileTestJava.options.encoding = 'UTF-8'
project layouts : 如 java 文件目录结构 一般是 src/main/java src/main/test/java 等等 ;
Directory Meaning
src/main/java Production Java source
src/main/resources Production resources
src/test/java Test Java source
src/test/resources Test resources
src/sourceSet/java Java source for the given source set
src/sourceSet/resources Resources for the given source set
task : 提供一些 task ;
eg :
gradle build //会编译并测试 代码最后创建 jar 包
gradle clean //清空
gradle check //编译并测试
各种 task 之间关系如下图:
★ jar 包依赖管理
增加 Maven 仓库 : 一个公共的 Maven 仓库
repositories {
mavenCentral() // maven 的仓库中心
}
或者
repositorise {
jcenter() // Bintray 的 Jcenter 库
}
或者其他的远程仓库
repositories{
maven {
url "http://repo.mycompany.com/maven2"
}
}
或者本地仓库
添加依赖
方式 ①
dependencies {
compile group: 'commons-collections', name: 'commons-collections', version: '3.2.2'
testCompile group: 'junit', name: 'junit', version: '4.+'
}
方式②
ext {
springVersion = '4.2.2.RELEASE'
}
dependencies {
compile(
'org.springframework:spring-webmvc:' + springVersion,
'org.apache.commons:commons-lang3:3.4',
)
}
注意 : ★ providedCompile 只有 在 提供了插件 apply plugin : 'war' 时 才可以使用。
《可以参看 : gradle 官网》