Gradle入门
1.什么是Gradle
Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化构建开源工具。它使用一种基于Groovy语言进行编写的,主要面向Java应用为主,目前也增加了基于Kotlin语言以及Scala语言的支持,目的是为了抛弃了基于XML的各种繁琐配置。
2.安装Gradle
2.1下载
使用win10为例进行安装,前提是本机已安装JDK1.8+。下载网址:https://gradle.org/install/。在下载页面选择二进制的文件,然后解压到指定的目录即可。
2.2安装
解决后需要配置环境变量,需要指定到bin目录,配置后是cmd输入
gredle -v
看到下图说明安装成功。
3.Gradle与IDEA集成
项目源码:https://github.com/zhongyushi-git/gradle-collection.git。本介绍IDEA版本是2020.3.3,其他版本可能有差别。
1)打开idea,使用gradle创建一个java项目,指定JDK
2)点击next,输入基本信息
3)点击finish,就会进行创建。创建成功后并没有生成src目录,就需要手动通过任务创建。
4)设置Gradle的安装路径为本地路径,jvm使用本地的jdk
5)打开build.gradle文件,在最后面添加下面的代码
task "create-dirs" { sourceSets*.java.srcDirs*.each { it.mkdirs() } sourceSets*.resources.srcDirs*.each{ it.mkdirs() } }
6)点击右边的Gradle中的刷新按钮,然后按下图步骤操作
7)操作成功后就有src目录了,生成的目录如图
4.Groovy基本语法
4.1打开Groovy调式窗口
在gradle使用的是groovy语言,可以通过Groovy调式窗口来测试groovy代码,打开方式是在菜单栏选择Tools,如下图:
打开后就可以在里面输入代码,点击左边的按钮执行,执行的结果在控制台进行打印
4.2 基本语法
1)基本输出
基本输出使用println,后面的括号可省略,也不需要添加分号
println("hello world") println "hello world"
打印结果如下
2)定义变量
定义变量可以使用int,string等类型,也可以使用def来声明,但需要注意的是在groovy中没有基本数据类型,都是对象类型。
int a = 23 println a def aa = 234 println aa def str = 'hello' def str2 = "hello" println str println str2
3)定义方法
方法的定义类似于JavaScript,使用def声明。分支语句if-else也类似,在此略
def test(def p){ println("参数是:"+p) } test('hello gradle')
4)定义l集合
定义list集合
def list = ['love','哈哈哈','xiaohei','456'] //使用下标访问 println list[0] //遍历 for(el in list){ println el }
定义map集合
def map = ['name': '张三', 'age': 20, sex: '男'] println map.get('name') for (item in map) { println(item.getKey() + ":" + item.getValue()) }
4.3闭包
闭包表示的是groovy中的一段代码块,主要作为参数在方法之间传递使用。相当于一块公共的代码块,在不同的方法中来调用。那么在方法中药使用Closure 关键字来定义参数,在方法里面调用此类型的方法,如下代码是无参数的闭包:
//闭包 def aaa = { println('hello geadle') } def test1(Closure closure){ //执行闭包的代码 closure() } test1(aaa)
带有参数的闭包
//闭包 def bbb = { v -> println('hello ' + v) } def test2(Closure closure){ //执行闭包的代码 closure('zxh') } test2(bbb)
4.4build.gradle和settings.gradle详解
在第三章汇总创建gradle的项目后,在项目根目录下有两个文件,分布是build.gradle和settings.gradle。
1)在依赖中,group就是pom中的groupId,name就是pom中的artifactId。
2)settings.gradle中指定的就是项目名,要通过项目名进行访问。
3)mavenCentral()表示使用中央仓库,则项目中所需要的jar包都会默认从中央仓库下载到本地指定目录中(C:\\Users\\username\\.gradle\\caches\\modules-2\\files-2.1)
4.5 指定maven中心仓库的路径
若直接使用中央仓库,则下载很慢,会使用本地以及下载好的仓库。配置步骤如下:
1)把本地仓库路径其配置到环境变量中
需要注意的是,这个变量名只能是这个,固定的,否则不会生效。
2)配置本地仓库
在build.gradle的repositories中添加mavenLocal()并指定下载的仓库,如图
mavenLocal表示从本地仓库寻找jar包,先从本地查找,没有找到再中央仓库下载。当然,这里只配置了一个地址,需要的时候可以配置多个阿里云的仓库地址,毕竟阿里仓库的服务器主机不止一台。
maven {
url 'https://maven.aliyun.com/repository/public/'
}
mavenLocal()
配置后重启idea,再次打开settings,看到Grade user home已经变成指定的仓库路径了,如下图
5.使用Gradle创建spring项目
示例源码:从第三章下载源码,此源码在gradle-demo文件夹下。
在第3章中,我们已经创建了一个基本的java项目,就在此基础上进行开发,使用spring的自动注入功能。
1)在build.gradle先导入spring-context的依赖
compile group: 'org.springframework', name: 'spring-context', version: '5.3.4'
这种依赖可以在https://mvnrepository.com/中选择gradle格式复制。
2)创建UserService接口
package com.zxh; public interface UserService { void getList(); }
3)创建UserServiceImpl实现类
package com.zxh; public class UserServiceImpl implements UserService { @Override public void getList() { System.out.println("all user list"); } }
4)在资源目录下创建spring的配置文件applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <bean id="userService" class="com.zxh.UserServiceImpl"></bean> </beans>
5)修改gradle的构建及运行环境使用IDEA环境
此选项默认是Gradle,需要修改为IDEA。凡是gradle的项目,这里都必须改成IDEA。
6)在test目录下新建测试类和方法
package com.zxh; import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class UserTest { @Test public void test3() { //加载配置文件 ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); //获取bean对象 UserService userService = (UserService) context.getBean("userService"); //调用方法 userService.getList(); } }
7)运行测试方法。可以看到把UserService注入进来并调用其方法了。
6.使用Gradle创建spring web项目
示例源码:从第三章下载源码,此源码在gradle-web-demo文件夹下。
1)打开idea,选择新建项目
2)使用Gradle进行创建,选勾选ava
3)输入项目基本信息
4)创建后使用Task命令创建src目录(第三章已介绍)
5)设置Gradle的安装路径为本地路径,jvm使用本地的jdk并使用idea进行构建
6)在src/main目录下新建webapp目录
7)在build.gradle中指定项目是war包,并添加spring需要的依赖,指定本地仓库
附上依赖:
implementation group: 'org.springframework', name: 'spring-beans', version: '5.3.4' implementation group: 'org.springframework', name: 'spring-context', version: '5.3.4' implementation group: 'org.springframework', name: 'spring-core', version: '5.3.4' implementation group: 'org.springframework', name: 'spring-expression', version: '5.3.4' implementation group: 'org.springframework', name: 'spring-web', version: '5.3.4' implementation group: 'org.springframework', name: 'spring-webmvc', version: '5.3.4' compileOnly group: 'javax.servlet', name: 'javax.servlet-api', version: '4.0.1' compileOnly group: 'javax.servlet.jsp', name: 'javax.servlet.jsp-api', version: '2.3.3'
当然,上述的依赖是完整的格式,也有简写的格式,如下:
implementation 'org.springframework:spring-beans:5.3.4' implementation 'org.springframework:spring-context:5.3.4' implementation 'org.springframework:spring-core:5.3.4' implementation 'org.springframework:spring-expression:5.3.4' implementation 'org.springframework:spring-web:5.3.4' implementation 'org.springframework:spring-webmvc:5.3.4' compileOnly 'javax.servlet:javax.servlet-api:4.0.1' compileOnly 'javax.servlet.jsp:javax.servlet.jsp-api:2.3.3'
7)点击右侧gradle中的刷新按钮,然后打开project Structrue,
8)选择Facets,再选择web,在Deployment Descriptors中点击添加按钮,会显示web.xml,再点击进行添加
9)在弹框中指定webapp的目录,并在后面添加\WEB-INF\web.xml后点击OK,
10)此时在Web Resource Directories中的目录也会变成webapp所在的路径
11)点击Apply,webapp目录就变成资源目录了,也生成了web.xml文件
12)在web.xml中配置内容
<!--springmvc前端控制器--> <servlet> <servlet-name>DispatcherServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!--加载配置文件--> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:springmvc.xml</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>DispatcherServlet</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>
13)在resources目录下新建springmvc.xml,内容如下
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <!--开启注解--> <mvc:annotation-driven></mvc:annotation-driven> <!--包扫描--> <context:component-scan base-package="com.zxh.controller"/> </beans>
14)创建包com.zxh.controller,并在此包下新建TestController类
package com.zxh.controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class TestController { @GetMapping("/test") public String test() { return "Hello,world!Gradle"; } }
15)点击add Configuration,添加tomcat
16)添加tomcat
17)选择Deployment,添加要运行的项目
18)选择项目
19)修改访问路径为/,方便访问
20)启动tomcat,访问localhost:8080/test即可看到返回的信息,此时搭建已经完成。
7.使用Gradle创建springboot项目
示例源码:从第三章下载源码,此源码在gradle-springboot-demo文件夹下。
1)打开idea,选择新建项目
2)使用Spring Initializr进行创建
3)输入基本信息,type选择Gradle,packaging选择war
4)选择Web,勾选Spring Web
5)点击next,最后完成即可。设置Gradle的安装路径为本地路径,jvm使用本地的jdk
6)build.gradle中添加本地仓库
7)点击右侧的gradle打开面板,点击刷新按钮,下载需要的依赖
8)下载完成后会在包下生产启动类和servlet启动器,这里先不启动。
9)修改配置文件application.properties,把配置应用名称的哪行代码注释
注释掉是为了方便测试。
10)在包下新建controller包,再建TestController类,写一个测试的接口
@RestController public class TestController { @GetMapping("/test") public String test(){ return "Hello,Gradle!"; } }
11)点击运行启动类,可以看到在控制台运行成功,如图
12)在浏览器访问http://localhost:8080/test可正常返回数据,此时使用gradle创建SpringBoot项目已完成。
8.查看依赖关系
maven的方式打开pom.xml可以很清楚的看到其依赖关系和版本冲突,而gradle对多个版本,则默认会采用最高的版本,也可直接查看依赖关系:
执行后即可在控制台看到依赖关系图:
当需要排除某个包的依赖时,可使用以下方式:
将原有依赖使用小括号包裹起来,需要排除的依赖使用大括号包裹,里面指定group即可。