如何使用gradle

gradle

gradle是一种新的构建项目工具,他和mavenAnt一样,并且集合了他们的优点。它是由google公司基于jvm编写的。Gradle 正迅速成为许多开源项目和前沿企业构建系统的选择,同时也在挑战遗留的自动化构建项目。

Gradle的特点:

高性能
基于jvm
约束:跟maven一样,有自己的项目结构
可扩展:可以diy

安装

我们要来使用gradle,首先就要安装。我们可以前往gradle官网进行安装。这里需要知道,gradle官网并且写出需要jdk1.8或者更高的版本!

如果你家电脑网速不好,可以使用腾讯云的镜像进行下载。
下载完成后,将他解压到你想存放的位置,然后进行环境变量的配置,就跟java一样,在path里面写上gradle_home并将他的文件夹目录粘贴到上面即可。

然后进入命令行 gradle -v来看看是否安装成功。

目录结构

build:封装编译后的内容
gradle:封装包装器
src:写代码的地方
build.gradle:构建脚本
settings.gradle:配置文件

创建项目

idea上面自带的创建,或者使用命令行 grade init进行创建。在创建项目时候,她会问你使用什么格式来进行配置文件创建,kotlin,或者groovy进行dsl配置。

分别是
1.生成项目类型
2.使用语言
3.dsl配置使用语言
4.test框架
5.项目名称
6.包名称
7.jdk版本
8.是否使用api
在这里插入图片描述

常用指令

gradle clean:清空build目录
gradle classes:编译业务代码和配置文件
gradle test:编译测试代码,test目录中内容,生成测试报告
gradle build:构建项目,会先执行classes,test命令
gradle build -x test:跳过测试进行构建

执行上面的指令后,结果会出现在app目录的build中,classes指令会生成java代码的class文件test指令会将test文件夹内容进行执行,并且在build文件夹中生成reports目录。

111

修改下载源

我们知道他和maven一样,对于我们国内下载外面的内容是十分慢的,所以我们要重新配置他的下载源。那如何更改呢?

首先来到init.d目录在这里插入图片描述
我们可以在这个文件夹中写一些脚本,每次的执行都会运行这个文件夹里面的脚本。

我们在这个文件夹中创建init.gradle文件,并且写入

allprojects{
    repositories {
        def ALIYUN_REPOSITORY_URL = 'https://maven.aliyun.com/repository/public'
        def ALIYUN_JCENTER_URL = 'https://maven.aliyun.com/repository/public'
        def ALIYUN_GOOGLE_URL = 'https://maven.aliyun.com/repository/google'
        def ALIYUN_GRADLE_PLUGIN_URL = 'https://maven.aliyun.com/repository/gradle-plugin'
        all { ArtifactRepository repo ->
            if(repo instanceof MavenArtifactRepository){
                def url = repo.url.toString()
                if (url.startsWith('https://repo1.maven.org/maven2/')) {
                    project.logger.lifecycle "Repository ${repo.url} replaced by $ALIYUN_REPOSITORY_URL."
                    remove repo
                }
                if (url.startsWith('https://jcenter.bintray.com/')) {
                    project.logger.lifecycle "Repository ${repo.url} replaced by $ALIYUN_JCENTER_URL."
                    remove repo
                }
                if (url.startsWith('https://dl.google.com/dl/android/maven2/')) {
                    project.logger.lifecycle "Repository ${repo.url} replaced by $ALIYUN_GOOGLE_URL."
                    remove repo
                }
                if (url.startsWith('https://plugins.gradle.org/m2/')) {
                    project.logger.lifecycle "Repository ${repo.url} replaced by $ALIYUN_GRADLE_PLUGIN_URL."
                    remove repo
                }
            }
        }
        maven { url ALIYUN_REPOSITORY_URL }
        maven { url ALIYUN_JCENTER_URL }
        maven { url ALIYUN_GOOGLE_URL }
        maven { url ALIYUN_GRADLE_PLUGIN_URL }
    }
}

配置完成后,重新使用gradle classes进行试验,发现速度快得多了。

在这里插入图片描述

在这里插入图片描述

wrapper

gradle的wrapper是对gradle的一层封装,为了解决实际开发中可能遇到不同项目不同版本的gradle,这时候我们就要考虑使用gradle wrapper了,拥有这玩意,我们本地就不需要在设置gradle了。

使用

如何去使用wrapper呢,在创建出来的项目中有gradlew.batgradlew,点开gradlew可以看到配置。
在这里插入图片描述
意思是指定当前项目目录的gradle文件夹wrapper目录下的jar包。

我们可以在命令行使用gradlew指令,调用的其实就是gradlew.bat 加上我们想使用的命令。在这里有一点就是wrapper的版本和本地的版本会不一样。这个很正常,不然为什么要使用wrapper呢。

我们也可以指定这个版本的生成。

指令内容
gradle wrapper --gradle-version=版本号指定版本
gradle [wrapper] --gradle-distribution-url=地址指定下载地址

配置

gradlewrapper的配置信息全部保存在项目目录的gradle下wrapper目录的wrapper.properties里面。
在这里插入图片描述

里面包含wrapper保存位置,下载位置,gradle的版本号,解压位置等等。

执行流程

1.当我们执行gradlew bulid时,他会去properties中配置的url进行下载gradle包,并且保存在GRADLE_USER_HOME/wrapper/dist中。
2.然后解压到同样的位置。
3.将解压内容同时放到GRADLE_USER_HOME/caches中进行缓存,下次使用就不需要重新下载了。

总结

这里也很清晰了,当我们使用别人的项目时候,通过项目使用gradle,如果是我们本地项目,那当然使用本地gradle了。

groovy

groovy是java的一种脚本化改良版,groovy也是运行在jvm上,可以很好地与java代码进行交互,是一种成熟的面向对象编程语言。相比于java使用groovy可以更少的内容完成工程。

特点

1.提供动态类型转换、闭包、元编程(metaprogramming)支持
2.支持函数式编程,不需要main函数
3.默认导入常用包
4.类不支持default,且默认作用域为public
5.groovy也是对象,可以直接调用对象方法
6.支持dsl(domain specific language)和其他简洁的语法,让带吗变得易于阅读和维护。

安装

官网安装,配置环境变量,groovy -v看是否安装成功。
在这里插入图片描述

基本语法

1.基于java代码,所以兼容java代码,既可以当脚本语言,也可以当做类【对象】使用。
在这里插入图片描述
2.在groovy文件中可以混合类的定义和脚本定义。但名不能相同。

3.groovy中简化了对于变量和方法的具体数据类型定义,使用def来定义,不建议使用具体数据类型。
在这里插入图片描述

4.groovy的语法末尾可以不使用结尾符,跟python一样。

5.类 方法 字段都是默认public,而java是default。

6.groovy会为变量 或者属性生成getter,setter方法

6.方法声明时,参数类型,返回值类型,return关键字可以省略,方法调用时,会默认选择最后一个输出当做return返回。在不影响歧义的地方,可以省略方法的括号。

7.对象属性赋值:
对象.属性名=
对象[“属性名”]
对象.setter()
具体构造器

8.对象get方法
对象.属性
对象[属性名]
对象.getter

9.字符串
单引号 ‘ ’ 不支持变量引用,不支持换行操作
双引号 “ ” 支持变量引用,不支持换行操作 ${desc}
三引号 ‘’’ 不支持变量引用,支持换行操作。
在这里插入图片描述

只有第二个是groovy的封装。
在这里插入图片描述

10.闭包
一串代码块,可以放到一个地方执行。

gradle创建web项目

如果你要使用gradle创建java web项目,你需要war插件,war是一种运行web项目的包。
在下图位置添加war插件,这个意思是添加创建war包的task任务。

在这里插入图片描述

你写上这个后,可以在右边task中看到。
在这里插入图片描述
也可以使用apply,不过现在已经不怎么样了,这里不细讲。
经过这样的操作,当你运行gradle的build后,就会在build文件夹的libs下面生成两个war包,一个是exploded一个是普通的。

(1)war模式这种可以称之为是发布模式,看名字也知道,这是先打成war包,再发布;

(2)war exploded模式是直接把文件夹、jsp页面 、classes等等移到Tomcat 部署文件夹里面,进行加载部署。因此这种方式支持热部署,一般在开发的时候也是用这种方式。

plugin也可以放其他很多插件,具体可以看他的社区。

测试

gradle项目在执行build后会将test目录下的内容全部执行一遍,并且在report目录下生成报告。他支持JunitTestNG测试。

首先在环境中写上使用测试工具版本。
在这里插入图片描述
然后在下面的test内容中写上useJunitPlatform()
这里我使用的是junit5
在这里插入图片描述
junit5

    testImplementation platform('org.junit:junit-bom:5.9.1')
    testImplementation 'org.junit.jupiter:junit-jupiter'
test{
use JUnitPlatform()
}

junit4

    testImplementation('junit:junit:4.13')
test{
use Junit()
}

简单的操作

还有一些简单的操作我就放到这个图里面了。
在这里插入图片描述

gradle的生命周期

gradle的生命周期分为三大阶段:Initialization Configuration Execution。

init
1.初始化 init.gradle
2.执行项目的settings.gradle(记录当前项目的项目名和子项目名)

configure
1.执行本项目的build.gradle进行生成task任务(根据层级结构加载,首先是allProject,其次是plugins和dependency)

execute
执行configure构造的task任务树

settings文件

settings文件是用来确认项目的层级结构的,为之后构建项目工程树做准备。他类似于maven中的project和module。
rootproject->subproject

我在这里创建了两个module,他就会在settings文件中显示出来。
在这里插入图片描述
include实际上是settings类的方法,他的括号是groovy省略了。
在这里插入图片描述
include实际放入的就是我们rootProject下面的子项目。他是基于相对路径的。

dependency

bulid.gradle中的dependencies是project类的方法。他里面是放了一个闭包,所以省略的圆括号直接使用了宽括号。
在这里插入图片描述

依赖方式

1.本地依赖:一个文件夹下面有需要的依赖
2.项目依赖:一个项目依靠另一个项目
3.直接依赖:直接导入依赖

在这里插入图片描述

依赖冲突

gradle会优先选择版本更高的jar包,1.4和1.6选择1.6 。
你也可以使用参数exclude来排除一些依赖。

    implementation ('mysql:mysql-connector-java:8.0.33'){
        exclude(group:'org.sl4f.jar`')
    }

不允许使用依赖传递

    implementation ('mysql:mysql-connector-java:8.0.33'){
        exclude(group:'org.sl4f.jar`')
        transitive(false)
    }

强制使用某个版本号

    implementation ('mysql:mysql-connector-java:8.0.33'){
        version {
            strictly('1.4')}
    }

可以配置当遇到依赖冲突,就立即构建失败

configurations .configureEach(){
    Configuration configuration->
        configuration.resolutionStrategy .failOnVersionConflict()
}

gradle创建springboot项目

plugins{
id 'java'
id 'war'
//下面两个是管理springboot的依赖包的,就跟maven的dependencyManagement一样
    id 'org.springframework.boot' version '2.3.7.RELEASE'
    id 'io.spring.dependency-management' version '1.0.10.RELEASE'
}

dependencies{
    implementation 'org.springframework.boot:spring-boot-starter-jdbc'
    implementation 'org.springframework.boot:spring-boot-starter-web'
    runtimeOnly 'com.mysql:mysql-connector-j'
    providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
    

然后就可以使用了。

一定要注意版本问题。
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值