项目构建工具Gradle快速入门
一. 创建项目
首次创建,idea 会下载 gradle 工具。
二. 目录结构介绍
- gradle 目录: 存放 gradle wrapper 相关文件,gradle wrapper 是 gradle 项目构建工具,它能在本地没有 gradle 的情况下,从远程下载 gradle 并自动解压缩以构建项目,自动管理 gradle 版本。gradle-wrapper.properties 是 gradle wrapper的配置。distributionUrl 指定本地没有配置 gradle 的情况下从哪下载gradle,distributionBase 指定 gradle 下载和缓存 jar 的根目录,默认用户目录。在实际使用中我们一般不直接使用 gradle,而是使用 gradle wrapper,而对于 idea 而言我们可以不去关心两者区别,idea 的 gradle 环境是基于 gradle wrapper 的。
- build.gradle:相当于 maven 里面的 pom.xml
- sourceCompatibility:指定编译 .java 文件的 jdk 版本
- plugins:插件配置;格式为id «plugin id» version «plugin version» [apply «false»] Gradle 的核心插件只需提供id的简称就可以
- repositories:仓库配置,mavenCentral() 代表中央仓库,你也可以用maven{url '<url>'}的方式添加一个仓库
- dependencies:依赖的坐标集合
- setting.gradle:用于多模块的配置
三. Gradle依赖
如下格式的 dependency 复制到Gradle里面后,会自动修改格式,比如
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${slf4j.version}</version>
</dependency>
自动变成
dependencies {
compile 'org.slf4j:slf4j-api:${slf4j.version}'
}
在 gradle 中,项目依赖的格式为: 作用范修饰符 'groupId:artifactId:version',作用范围修饰符包括:
- complie:编译范围依赖在所有的 classpath 中可用,同时它们也会被打包,这个是最常用的
- runtime:runtime 依赖在运行和测试系统的时候需要,但在编译的时候不需要。
- testComplie:测试期编译需要的附加依赖
- testRuntime:测试运行期需要
四. Gradle打包
和在 idea 中使用 maven 一样,点击右侧 gradle 标签可看到上图相关 gradle 的操作,build 对应的是 ./gradlew build
命令;双击运行 build 会生成一个 build 文件夹 ,class 文件和 jar 包都在里面。
五. Groovy基础
学习 Groovy 的目的是为了更好的使用 Gradle,这里是非常基础的用法,打开 Groovy 的 console 直接运行 Groovy 脚本。
Groovy是一种与 Java类似,完全支持 Java 语法、基于 JVM 的编程语言,主要用于写脚本,我们的 Gradle 的脚本就是 Groovy 语言写的。
点击运行图标,或者快捷键:Command + Enter运行:
- Groovy 基础
// 定义变量 相当于var 弱类型
def i = 15
println(i)
def s = "hello"
println s
// 集合定义
def list = ['s', 'a']
// 添加元素
list << 'c'
// 取出 元素
println list.get(0)
println list.get(0)
// map定义
def map = ['key': 'value']
println map.get('key')
// map添元素
map.test = 'add'
println map.get('test')
- Groovy 闭包
// 闭包: 相当于函数式编程
def close1 = {
println "你好"
}
// 方法定义
def test(Closure closure) {
closure()
}
//使用闭包
test(close1)
// 带参闭包
def close2 = {
v -> println v + v + v
}
def test2(Closure closure) {
closure("s")
}
//使用带参闭包
test2(close2)
// 占位符
def close3 = {
v -> println("test $v ")
}
test2(close3)
// 结果如下
你好
sss
test s
六. Gradle多模块
- 在 idea 中构建多模块很简单,和 maven 操作一样,但项目结构有所不同。在父模块中有一个 settings.gradle 文件,指定了子模块包含哪些,而需要继承给子模块的东西需要在父模块 build.gradle 中配置 subprojects 闭包。
- 假设我的代码都在子项目中(假设有 common、service 两个子项目),删除根项目下的 src 目录。
- 步骤:在根目录 gradlejava 文件夹右键选择 New -> Module -> Gradle -> Java, 指定子模块 ArtifactId 名称,依次添加 common 模块和 service 模块后,gradle 相关的目录结构就建好了。
- 创建 common 模块的工具类 org.yuchaoshui.CustomFileHandler
- 创建主类 org.example.Main
- 主类的 build.gradle 中添加对 common 模块的依赖
plugins {
id 'java'
}
group 'org.example'
version '1.0-SNAPSHOT'
repositories {
mavenCentral()
}
dependencies {
testCompile group: 'junit', name: 'junit', version: '4.12'
compile project(":common")
}
- 运行项目