Gradle入门
前言
Java 作为一门世界级主流编程语言,有一款高效易用的项目管理工具是 Java 开发者想要的。先是 2000 年的 Ant,后有 2004 年Maven 的诞生,都在 Java 市场上取得了巨大的成功。但二者都有一定的不足和局限性。
2012年基于 Ant 和 Maven 产生的 Gradle,弥补了 Ant 和 Maven 的不足,带来了一些更高效的特点。它使用了一种更高效的特点。它使用一种基于 Groovy 的特定领域语言(DSL)来声明项目设置,抛弃了基于 XML 的各种繁琐配置。
Gradle 面向 Java 应用为主,当前支持的语言限于 Java、Groovy 和 Scala,计划未来支持更多的语言。
安装配置
下面以 MacOS 环境为例。
- 通过 Homebrew 安装 gradle
- 在 IDEA 中配置 gradle
gradle 项目目录结构
-
src/main/java
放置正式代码 -
src/main/resources
放置正式配置文件 -
src/test/java
放置单元测试代码 -
src/test/resources
放置测试配置文件 -
src/main/webapp
放置页面元素,比如 js、css、img、jsp、 html 等.
groovy 简单语法
快速使用 groovy :
IDEA 2017.2 -> Tools -> Groovy Console
println("Hello, world")
//groovy 中可以省略末尾的分号
//定义变量
//def 是弱类型的,groovy 会根据情况给变量赋予相应的类型
def i = 8
println("i=" + i)
def s = "xiaoming"
println(s)
//定义一个集合类型
def list = ['a', 'b']
list << 'c'
list.add('d')
println(list)
println("list[2]=" + list[2])
println("list[2]=" + list.get(2))
println("list[3]=" + list.get(3))
def list1 = [1, 2]
list1.add(3)
println("list1=" + list1)
//定义一个map类型
def map1 = ['k1':'v1', 'k2':'v2']
map1.put('k3', 'v3')
println("map1=" + map1)
println(map1.get('k2'))
groovy 中的闭包
//groovy 中的闭包
//什么是闭包? 闭包其实就是一段代码块.
//在 gradle 中,我们主要是把闭包当作参数来使用
def b1 = {
println("hello b1")
}
println("====================== 分割线 =====================")
//定义一个方法,里面需要闭包类型的参数
// 注意:这里输入 Closure 时,不要导入代码提示中的任何包
def method1(Closure closure) {
closure()
}
//调用方法 method1
method1(b1)
//定义一个有参数的闭包
def b2 = {
v ->
println("hello ${v}")
}
def method2(Closure closure) {
closure("xiaoming")
}
method2(b2)
gradle 配置文件的介绍
- build.gradle
导入 jar 包,可直接在 Maven 中央仓库搜索,以 spring-context 为例:
image.png找到对应 gradle 方式的配置,添加到 build.gradle 文件中.
- 让 gradle 使用本地 maven 仓库
如上面 build.gradle 文件所示,gradle 默认使用的是 maven 中央仓库,添加 jar 包时,会从 maven 中央仓库下载 jar 包到指定目录(Mac 下是 /Users/用户名/.gradle)。
如果想使用本地的 maven仓库,可以指定环境变量 GRADLE_USER_HOME 为 本地 maven 仓库的路径,然后在 build.gradle 中添加 mavenLocal(),如下:
image.png以上表示,先从本地仓库寻找 jar 包,若找不到,再从中央仓库下载.
gradle 工程,生成 jar 包
image.png通过 gradle 构建 Web 工程
- 1.新建一个 gradle 工程
- 2.在此基础上,在 src/main 目录下添加 webapp 目录
- 3.然后配置 build.gradle 文件,添加 apply plugin: 'war' ,如下
此时,webapp 目录的小图标中间有了一个蓝色的原点,表示不再是一个普通目录:
image.png- 4.添加项目所需的 jar 包,在 build.gradle 文件中配置:
- 5.创建一个类 me.falcon.controller.HelloController
- 6.创建一个资源配置文件 springmvc.xml
- 7.在 webapp 目录下,新建 index.jsp 作为首页
- 8.在 webapp 目录下,新建 WEB-INF/web.xml
- 9.在 webapp 目录下,新建 WEB-INF/pages/list.jsp
- 10.配置 Tomcat 服务器
- 11.运行项目
gradle 工程拆分与聚合
新建 gradle 工程 gradle_02_parent,再对着 gradle_02_parent 点右键,新建3个 gradle 的 module,分别为:gradle_02_dao、gradle_02_service 和 gradle_02_web。并将 gradle_02_web 配置成 web 工程,即在 src/main 目录下添加 webapp 目录,并在 gradle_02_web 的 build.gradle 文件中添加 apply plugin: 'war'。
image.png依赖包 jar 声明在 gradle_02_parent 下的 build.gradle 文件中,且用 allprojects 标签包着:
image.png然后,在 gradle_02_dao,gradle_02_service,gradle_02_web 3个模块的 build.gradle 文件中 ,可以删除 gradle_02_parent 下的 bulid.gradle 文件中已有的内容了。
因此,
gradle_02_dao/build.gradle 内容为空;
gradle_02_service/build.gradle 内容如下:
gradle_02_web/build.gradle 内容如下:
image.png------------ 代码 -----------------
gradle_02_web 模块的相关代码如下:
- UserController.java
- springmvc.xml
- index.jsp
- list.jsp
gradle_02_service 模块相关代码如下:
- UserServiceImpl.java
gradle_02_dao 模块相关代码如下:
- UserDaoImpl.java
配置 Tomcat 服务器后,运行项目,如下:
image.png