当前位置:   article > 正文

【Gradle】Gradle的概述与简单使用

gradle

个人主页金鳞踏雨

个人简介:大家好,我是金鳞,一个初出茅庐的Java小白

目前状况:22届普通本科毕业生,几经波折了,现在任职于一家国内大型知名日化公司,从事Java开发工作

我的博客:这里是CSDN,是我学习技术,总结知识的地方。希望和各位大佬交流,共同进步 ~

一、概述

1.什么是Gradle

Gradle 是一种构建工具

Java世界中主要有三大构建工具:Ant、Maven和GradleAnt几乎销声匿迹了,常见的就只有Maven和Gradle。

目前市面上Java开发,使用的构建工具基本都是Maven;安卓开发可能会使用到Gradle。

Maven的主要功能主要分为5点

  1. 依赖管理系统
  2. 多模块构建
  3. 一致的项目结构
  4. 一致的构建模型
  5. 插件机制

Gradle 是继Maven之后的新一代构建工具,它采用基于groovy的DSL语言作为脚本,相比传统构建工具通过XML来配置而言,最直观上的感受就是脚本更加的简洁、优雅

2.Gradle的优势

依赖管理:即将你项目中的jar包管理起来,你可以使用Maven或者Ivy的远程仓库、或者本地文件系统等(可以和Maven共用仓库

编译打包:可以通过脚本实现花样打包,包括修改文件、添加抑或排除某些类或资源、采用指定JDK版本 构建、打包后自动上传

多项目支持:Gradle对多项目有着良好的支持,比如一个很具有代表性的实践就是 Spring FrameworkSpring源码就是使用Gradle的!!!)

多语言支持:无论是 java、groovy、scala、c++都有良好的支持

跨平台支持:gradle是基于jvm的,只要有 jvm 你就可以让gradle运行

3.Maven与Gradle的区别

(1)灵活的的脚本:你可以使用groovy灵活的编写任务完成你想要做的任何事情

一方面是因为gradle使用的是groovy或者kotlin语言作为脚本的编写语言,这样极大的提高了脚本的灵活性, 但是其本质上的原因是 gradle的基础架构能够支持这种灵活性

(2)Gradle更快

Gradle 和 Maven 都支持并行的项目构建和依赖解析。

但是 gradle 有三个特点让其比Maven要更快!!!

a.增量构建

gradle为了提升构建的效率,提出了增量构建的概念,为了实现增量构建,gradle将每一个task都分成了三部 分,分别是input输入,任务本身和output输出。

增量构建的原理:监控input的变化,只有 input 发送变化了,才重新执行task任务,否则gradle认为可以重用之前的执行结果。

b.构建缓存

gradle可以重用同样 input 的输出作为缓存。

在同一个机子上这个与增量构建是同一个意思。但是缓存可以跨机器共享

也就是说,如果你是在一个CI服务的话,build cache将会非常有用。因为 开发者的 build 可以直接从CI服务器上面拉取构建结果,非常的方便。

c.Gradle守护进程

gradle会开启一个守护进程来和各个build任务进行交互,优点就是不需要每次构建都初始化需要的组件和服务。 同时因为守护进程是一个一直运行的进程,除了可以避免每次JVM启动的开销之外,还可以缓存项目结构,文件,task和其他的信息,从而提升运行速度。

我们可以运行 gradle –status 来查看正在运行的 daemons进程。

使用 Maven 与 Gradle 构建项目时间开销对比

二、Gradle安装配置

1.安装

环境:Win11、JDK8

官网下载地址:Gradle | Releases

更多版本下载地址:Gradle Distributions

一般下载 binary-only 即可。

2.配置

下载后解压,配置环境变量

新建GRADLE_HOME环境变量,将Gradle根目录配置

在 path 中加入项:%GRADLE_HOME%\bin

打开CMD,执行 gradle -v 

3.Gradle项目的Hello World

新建gradle项目

Gradle 项目的目录和 Maven 项目的目录几乎是一致的

build.gradle 文件中可以改一下镜像源,如下:

  1. repositories {
  2. mavenLocal()
  3. maven {
  4. url 'https://maven.aliyun.com/repository/public'
  5. }
  6. mavenCentral()
  7. }

项目结构

  1. 项目自动编译的时候要读取的配置文件。比如指定项目的依赖包等。 build.grade有两个,一个是全局的,一个是在模块里面。全局的build.grade主要设置的是声明仓库源,gradle的版本号说明等。
  2. linux下的gradle环境脚本,可以执行gradle指令,如:./gradlew build
  3. windows下的gradle环境,可以执行gradle指令
  4. 包含必要的一些设置,例如,任务或项目之间的依懒关系等,无论有多少个子模块,该文件只会有一个,且一定在根项目中;
  5. 包含wrapper文件夹及其2个子文件,作用是:可以自动安装gradle环境
  6. 程序源码 

三、Gradle的简单说明

1.Gradle的常用命令

帮助命令

gradle --help

查看版本

gradle -v

清空所有编译、打包生成的文件(即:清空build目录)

gradle clean

构建

gradle build

跳过测试构建构建

gradle build -x test

2.Gradle-Wrapper

当你新建的一个gradle项目时会发现,程序会下载一个wrapper相关的zip包。

Gradle-Wrapper是简化 Gardle的安装和部署,出发点是让任意的gradle的项目都不需要单独安装环境,项目会自动识别有无环境,如果在本地没有找到与 wrapper.properties 版本相同的 Gardle,IDEA就会帮你下载一个 gradle环境。

我的IDEA中的 gradle-wrapper.properties 文件内容如下:

  1. # distributionBase和distributionPath是配合使用,指定gradle解压后的存放位置
  2. distributionBase=GRADLE_USER_HOME
  3. distributionPath=wrapper/dists
  4. # 指定某个版本gradle下载地址
  5. distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-bin.zip
  6. # zipStoreBase和zipStorePath配合使用,指定下载gradle.zip存放位置
  7. zipStoreBase=GRADLE_USER_HOME
  8. zipStorePath=wrapper/dists
  • GRADLE_USER_HOME表示用户目录

3.项目依赖文件对比

Maven 项目的依赖配置文件是 pom.xml,而 Gradle 项目的依赖文件是 settings.gradle build.gradle

settings.gradle VS build.gradle

settings.gradle 文件是 gradle 项目的总体配置文件,一般会把子项目中通用的一些配置放在这个文件中,有点类似于 maven 的 parent pom 文件;而 build.gradle 文件则是针对单个项目的具体配置,我们主要使用的是 build.gradle 文件。

从上述的配置文件可以看出,相比于 pom.xml 中的内容,build.gradle 还是要简洁很多的。

4.gradle中相关名词

我的 build.gradle 文件配置 如下:

  1. plugins {
  2. id 'java'
  3. }
  4. group 'com.harmony'
  5. version '1.0-SNAPSHOT'
  6. repositories {
  7. mavenLocal()
  8. maven {
  9. url 'https://maven.aliyun.com/repository/public'
  10. }
  11. mavenCentral()
  12. }
  13. dependencies {
  14. testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.1'
  15. testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.1'
  16. }
  17. test {
  18. useJUnitPlatform()
  19. }

(1)group、name、versiongroup是module所在组;name是module的名字,同一个组里name具有唯一性;version是module的版本号;group、name和version三者构成了该module的唯一性

(2)apply:在module中应用一个插件

(3)dependencies:用来声明 module 所依赖的 jar包或其他module

(4)repositories:声明一个仓库,告诉程序到哪个仓库去找相应的module、jar包等依赖

(5)task:用来声明module的任务,其对应org.gradle.api.Task

5.依赖管理

这点是 gradle 相较 maven 的优势之一了。相较于maven一大串的XML配置,gradle的依赖项仅需一行。

  1. dependencies {
  2. implementation 'org.springframework.boot:spring-boot-starter-web'
  3. compileOnly 'org.projectlombok:lombok'
  4. developmentOnly 'org.springframework.boot:spring-boot-devtools'
  5. annotationProcessor 'org.projectlombok:lombok'
  6. testImplementation 'org.springframework.boot:spring-boot-starter-test'
  7. }

gradle依赖的粒度控制更精细 

maven 只有 compile、provided、test、runtime 这四种 scope

  1. implementation,默认的scope。implementation的作用域会让依赖在编译和运行时均包含在内,但是不会暴露在类库使用者的编译时。 举例,如果我们的类库包含了gson,那么其他人使用我们的类库时,编译时不会出现gson的依赖。
  2. api,和implementation类似,都是编译和运行时都可见的依赖。但是api允许我们将自己类库的依赖暴露给我们类库的使用者。
  3. compileOnly 和 runtimeOnly,这两种顾名思义,一种只在编译时可见,一种只在运行时可见。类似于 Maven的provided比较接近。
  4. testImplementation,这种依赖在测试编译时和运行时可见,类似于Maven的test作用域。
  5. testCompileOnly 和 testRuntimeOnly,这两种类似于compileOnly和runtimeOnly,但是作用于测试编译时和运行时。

文章到这里就结束了,如果有什么疑问的地方,可以在评论区指出~

希望能和大佬们一起努力,诸君顶峰相见

再次感谢各位小伙伴儿们的支持!!!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/301639
推荐阅读
相关标签
  

闽ICP备14008679号