什么是Gradle
Java作为一门世界级主流的编程语言 , 有一款高效易用的项目管理工具 , 是java开发者共同追求的心愿和目标 , 先是2000年的Ant , 后2004年的Maven两个工具的诞生 , 都在java市场上取得了巨大的成功 , 但是二者都有一定的不足和局限性 。
2021年基于Ant和Maven产生的Gradle , 弥补了Ant和Maven的不足 , 带来了一些更高效的特点 , 它使用一种基于Groovy的特定领域语言(DSL)来声明项目设置 , 抛弃了基于XML的各种繁琐的配置 , 面向java应用为主 , 当前其支持的语言限于Java , Groovy和Scala , 计划未来将支持更多的语言 。
Gradle安装配置(windows版)
我们想使用Gradle , 首先要安装Gradle , 安装Gradle分为如下几步
- 下载Gradle
下载完成 , 进行解压 , 得到以下效果图
- 配置环境变量
打开环境配置,新建系统环境 GRADLE_HOME
, 值为D:\Program Files\gradle-6.6.1
。
找到path变量 ,后面添加%GRADLE_HOME%\bin;
在命令框中使用 gradle -v
命令 , 可以显示版本号 , 则表示安装成功
Gradle和idea集成
我们来创建一个Gradle工程
- 打开idea , 来创建工程
以下步骤 , 是指定项目的名称 , 以及项目路径地址 , 此处不再累述
项目创建好之后 , 需要在idea来配置Gradle
以上操作完成后 , 我们的Gradle工程就创建好了
以上是在idea上面创建一个简单的Gradle工程 , 但是可能很多同学创建的工程 , 没有src目录 , 不用担心 , 因为在创建项目工程时要下载Gradle的依赖 , 但是编译器总是提示 , 下载失败的情况 , 想要解决这个问题 , 请参考使用Gradle创建Spring Boot 项目的章节
Groovy语言简单介绍(Gradle配置文件所使用的语言)
Groovy是一种基于JVM(Java虚拟机)的敏捷开发语言,它结合了Python、Ruby和Smalltalk的许多强大的特性,Groovy 代码能够与 Java 代码很好地结合,也能用于扩展现有代码。由于其运行在 JVM 上的特性,Groovy 可以使用其他 Java 语言编写的库。
Groovy是一种基于Java平台的面向对象语言。 Groovy 1.0于2007年1月2日发布,其中Groovy 2.4是当前的主要版本。 Groovy通过Apache License v 2.0发布。
Groovy中有以下特点:
- 同时支持静态和动态类型
- 支持运算符重载
- 本地语法列表和关联数组
- 对正则表达式的本地支持
- 各种标记语言,如XML和HTML原生支持
- Groovy对于Java开发人员来说很简单,因为Java和Groovy的语法非常相
- 您可以使用现有的Java库
- Groovy扩展了java.lang.Object
以上内容 , 了解即可 ,不用太关于深究 , 这一章节 , 我们就学一下Groovy语言的简单使用
idea里面提供了编写Groovy语言的工具
提供此操作 , 会显示一个 groovy_console.groovy
文件 , 这是编写Groovy语言的控制台, 我们在该文件中就可以编写Groovy语言 , 然后进行执行
注意 : (Groovy语言与java语言非常非常非常的像 , 很简单),
Groovy语言编写起来 , 更加的随意 , 容错性 , 更加的强
比如 :
- groovy语言可以省略末尾的分号 (也是可以进行执行的)
println("hello groovy")
- groovy语言 , 可以省略括号 (也是可以进行执行)
println "hello groovy"
- groovy如何定义变量
def i = 18 //int类型
def s = "小明" //字符串类型
println i
println s
以上代码 , 创建一个def类型的 i
,指定的值是 18 , 如何我们使用println来输出了这个i
,
def介绍 : def类型是一种弱类型 , groovy会根据情况给变量赋予对应的类型 , 相当于 var
, 代表任意类型 ,
groovy不但可以指定int类型 , 字符串类型 , 我们也可以指定集合类型
<!-- 定义一个集合类型-->
def l = ['a' , 'b']
<!-- 往l中添加元素-->
l << 'c'
<!-- 取出l 中的第三个元素-->
println l.get(2)
定义一个Map
<!--定义一个map集合-->
def m = ["key1":"value1" , "key2":"value3"]
<!-- 向map中 , 添加一个key->value对-->
map.key3="value3"
<!-- 打印出key3的值-->
println map.get("key3")
groovy中的闭包
什么是闭包 : 闭包其实就是一段代码块 , 在gradle中 , 我们主要是把闭包当成参数来使用
<!-- 定义一个闭包 -->
def b1 = {
println "hello b1"
}
<!-- 闭包定义好了 , 但是我们要然后使用呢 , -->
<!-- 下面我们来定义一个方法 , 方法的参数需要闭包类型的参数 -->
def method1(Closure closure) {
<!-- 来执行该方法中的闭包参数-->
closure()
}
<!-- 调用方法 , 传入闭包 , 执行代码 , 你会发现 , 闭包里面的输出语句 , 执行了-->
method1(b1)
以上是简单的定义了一个闭包 , 下面我们来定义一个带有参数的闭包
<!-- 定义一个带有参数的闭包 -->
def b2 = {
<!-- v就是闭包的参数 -->
v ->
println "hello ${v}"
}
def method2(Closure closure) {
<!-- 来执行该方法中的闭包参数-->
closure("小明")
}
<!-- 调用方法 , 传入闭包 -->
method2(b2)
以上就是groovy语言的简单使用 , 学那么多 , 基本上够用了 , 如果有兴趣的学员 , 可以去网上深入学习 , groovy语言 , 总体来说 , 很简单 , 如果你感觉非常绕 , 看不懂 , 死记硬背 , 就这样的格式 , 就这样写 , 死记硬背的话也不影响以后开发
Gradle仓库的配置
以下是Gradle仓库的配置介绍
plugins {
id 'org.springframework.boot' version '2.3.7.RELEASE'
id 'io.spring.dependency-management' version '1.0.10.RELEASE'
id 'java'
id 'war'
}
group = 'com.example' //分组
version = '0.0.1-SNAPSHOT' //版本号
sourceCompatibility = '1.8'
// 指定所使用的仓库 ,
// mavenCentral() 表示使用中央仓库 , 此刻项目中所需要的jar包都会默认从中央仓库下载到本地指定的目录
repositories {
// ----------------------------------------(第一种写法) ,
// 一种写法解释 : 只配置中央仓库 , 表示直接中中央仓库下载jar包 , 但是如果指定下载的位置已经有了 , 就不会再次下载了
// 指定阿里云镜像(根据需要添加)
maven { url 'https://maven.aliyun.com/repository/public/' }
mavenCentral()
// ----------------------------------------(第二种写法)(推荐使用)
// 二种写法解释 : 以下两个配置 表示先从本地仓库寻找依赖 , 如果本地没有 , 再去中央仓库下载
// mavenLocal()
// mavenCentral()
}
// gradle工程所有的jar包的坐标都放在 dependencies 属性内放置
// 每一个jar包的坐标都有三个基本元素组成 (group , name , version)
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat'
testImplementation('org.springframework.boot:spring-boot-starter-test') {
exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
}
<!-- 以下可以引入多个jar包 -->
...
}
test {
useJUnitPlatform()
}
Gradle入门案例
- 我们先创建一个dao层的接口
package com.example.gradle_test.Dao;
/**
* @date 2021-05-10 16:03
*/
public interface TestDao {
public String getTestDao();
}
- 以及对应的实现类
package com.example.gradle_test.Dao.Impl;
import com.example.gradle_test.Dao.TestDao;
import org.springframework.stereotype.Service;
/**
* @date 2021-05-10 16:04
*/
@Service
public class TestDoaImpl implements TestDao {
@Override
public String getTestDao() {
return "测试成功了";
}
}
- 然后我们在test目录下 . 来进行测试
package com.example.gradle_test;
import com.example.gradle_test.Dao.TestDao;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class GradleTestApplicationTests {
@Autowired
TestDao testDao;
@Test
void contextLoads() {
System.out.println(testDao.getTestDao());
}
}
- 运行该程序 , 可以看到效果
> Task :compileJava UP-TO-DATE
> Task :processResources UP-TO-DATE
> Task :classes UP-TO-DATE
> Task :compileTestJava
> Task :processTestResources NO-SOURCE
> Task :testClasses
> Task :test
16:07:34.565 [Test worker] DEBUG org.springframework.test.context.BootstrapUtils - Instantiating CacheAwareContextLoaderDelegate from class [org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate]
......
16:07:34.996 [Test worker] DEBUG org.springframework.test.context.support.TestPropertySourceUtils - Adding inlined properties to environment: {spring.jmx.enabled=false, org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true}
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.3.7.RELEASE)
2021-05-10 16:07:35.359 INFO 8316 --- [ Test worker] c.e.g.GradleTestApplicationTests : Starting GradleTestApplicationTests on lep with PID 8316 (started by *** in D:\AllProjects\practice\Gradle\Gradle_test)
2021-05-10 16:07:35.362 INFO 8316 --- [ Test worker] c.e.g.GradleTestApplicationTests : No active profile set, falling back to default profiles: default
2021-05-10 16:07:37.068 INFO 8316 --- [ Test worker] o.s.s.concurrent.ThreadPoolTaskExecutor : Initializing ExecutorService 'applicationTaskExecutor'
2021-05-10 16:07:37.451 INFO 8316 --- [ Test worker] c.e.g.GradleTestApplicationTests : Started GradleTestApplicationTests in 2.44 seconds (JVM running for 4.431)
测试成功了
2021-05-10 16:07:37.887 INFO 8316 --- [extShutdownHook] o.s.s.concurrent.ThreadPoolTaskExecutor : Shutting down ExecutorService 'applicationTaskExecutor'
BUILD SUCCESSFUL in 6s
4 actionable tasks: 2 executed, 2 up-to-date
16:07:38:任务执行完成 ':test --tests "com.example.gradle_test.GradleTestApplicationTests.contextLoads"'。
- 我们也可以把项目进行打包
该目录下所有的命令 , 与Maven的命令差不多 , 如果我们指定双击jar包 , 则把项目打成一个jar , 也可以打成war包 ,