1--Gradle入门 - 简介、安装、目录结构、创建项目

news2024/11/24 20:30:13

1--Gradle入门 - 简介、安装、目录结构、创建项目

Gradle 官网

Gradle官网地址:Gradle Build Tool

Gradle官方下载安装教程页面:https://gradle.org/install/

Gradle官方用户手册:https://docs.gradle.org/current/userguide/userguide.html

1. Gradle入门

1.1 简介

Gradle是一款Google推出的,基于JVM,通用灵活的项目构建工具,支持Maven、JCenter多种第三方仓库;支持传递性依赖管理,废弃了繁杂的xml文件,转而使用简洁的、支持多种语言(Java、Groovy)的build脚本文件。

官网地址: https://gradle.org/

fdb1f0de713b5ed1fce86bc955bb9b60.png

1.2 常见项目构建工具

  • Ant:2000年Apache推出的存Java编写构建工具,通过xml[build.xml]文件管理项目。

    • 优点:使用灵活,速度快(快于Gradle和Maven)

    • 缺点:Ant没有强加任何编码约定的项目目录结构,开发人员需要编写繁杂的xml文件构建指令。

  • Maven:2004年Apache组织推出的再次使用xml文件[pom.xml]管理项目的构建工具

    • 优点:遵循一套约定大于配置的项目目录结构,使用统一的GAV坐标进行依赖管理,侧重于包管理。

    • 缺点:项目构建过程过于僵硬,配置文件编写不够灵活,不方便自定义组件,构建速度慢于Gradle

  • Gradle:2012年Goole推出的基于Groovy语言的全新项目构建工具,集合了Ant和Maven各自的优势。

    • 优点:集Ant脚本的灵活性+Maven约定大于配置的项目目录优势,支持多种远程仓库和插件,侧重于大项目构建。

    • 缺点:学习成本高、资料少、脚本灵活、版本兼容性等。

5f4fe4ced2feaa50500e95ff7279c4eb.jpeg

1.3 Gradle安装

SpringBoot官方文档明确指出:目前SpringBoot的Gradle插件需要gradle 6.8版本及其以上

IDEA与Gradle也存在兼容性问题:IDEA安装目录\plugins\gradle\lib下查看当前版本IDEA支持的Gradle版本

1.3.1 Gradle 安装说明

Gradle官网:https://gradle.org/

Gradle官方下载安装教程页面:https://gradle.org/install/

Gradle官方用户手册:https://docs.gradle.org/current/userguide/userguide.html

SpringBoot 官方文档明确指出,目前 SpringBoot 的 Gradle 插件需要gradle 6.8 版本及以上

292647eb3ba87196ca91c15238f7309a.jpeg

其中SpringBoot 与Gradle 存在版本兼容问题,Gradle 与Idea 也存在兼容问题,所以考虑到 java 程序员会使用SpringBoot,所以要选择 6.8 版本及高于 6.8 版本的Gradle,那么相应的idea 版本也要升级,不能太老哦。

具体参考文档:https://docs.spring.io/spring-boot/docs/2.5.0/gradle-plugin/reference/htmlsingle/#getting-started

我当前 Idea 的版本:2022.1.4

f4971d667c3e6dd9bb268eede901dde9.png

最简单查看 Gradle 与 Idea 兼容版本的方式,可以直接查看 Idea 的插件:

D:\Program Files\JetBrains\IntelliJ IDEA 2022.1.4\plugins\gradle\lib

849b4ce3060adaccb0c2ed8c460cf996.png

可以看到,兼容的 gradle 版本为 7.4,所以后续我们就安装 7.4 的 gradle

1.3.2 安装JDK

要求Jdk 为 1.8 或者 1.8 版本以上。

1.3.3 下载Gradle

Gradle | Releases

7717ce618e41093cc01e05da5b227eed.png

下载二进制安装包后,在本地解压,如下:

f0d26887cf5e0ed3b1247328cff376c7.png

1.3.4 配置环境变量

配置 GRADLE_HOME 就是 gradle 解压的路径:

GRADLE_HOME
D:\JavaInstall\gradle-7.4.2

c15485a37626144b392d858c60ea0102.png

配置 PATH,设置 GRADLE_HOME 的 bin 路径:

%GRADLE_HOME%\bin

7c423cfa50f228f616cc5906504ab7ec.png

配置 GRADLE_USER_HOME ,相当于配置 Gradle 本地仓库位置和 Gradle Wrapper 缓存目录。

注意:Gradle本地仓库可以和Maven本地仓库目录一致

GRADLE_USER_HOME
D:\JavaInstall\apache-maven-3.6.3\repository

cff2a6f5cf7daece867073931bf7e8d5.png

1.3.5 检测是否安装成功

gradle -v 或者 gradle --version

C:\Users\lijw>gradle --version

Welcome to Gradle 7.4.2!

Here are the highlights of this release:
 - Aggregated test and JaCoCo reports
 - Marking additional test source directories as tests in IntelliJ
 - Support for Adoptium JDKs in Java toolchains

For more details see https://docs.gradle.org/7.4.2/release-notes.html


------------------------------------------------------------
Gradle 7.4.2
------------------------------------------------------------

Build time:   2022-03-31 15:25:29 UTC
Revision:     540473b8118064efcc264694cbcaa4b677f61041

Kotlin:       1.5.31
Groovy:       3.0.9
Ant:          Apache Ant(TM) version 1.10.11 compiled on July 10 2021
JVM:          1.8.0_91 (Oracle Corporation 25.91-b15)
OS:           Windows 10 10.0 amd64

C:\Users\lijw>

1.3.6 修改Maven下载源

Gradle自带的Maven源地址是国外的,很慢,我们使用国内的第三方开放的Maven源或者企业内部的Maven源。

配置Maven下载源,并且启用

我们可以在gradle的init.d目录下,创建以.gradle结尾的文件,.gradle文件可以实现在build开始之前执行。所以我们可以在这个文件中配置预先加载的操作。

在init.d目录下,创建一个init.gradle文件

3b33c3ce924d76166734f3310a1f634c.png

allprojects {
    repositories {
        mavenLocal()
        maven { name "Alibaba" ; url "https://maven.aliyun.com/repository/public" } 
        maven { name "Bstek" ; url "https://nexus.bsdn.org/content/groups/public/" } 
        mavenCentral()
    }
    
    buildscript {
        repositories {
            maven { name "Alibaba" ; url 'https://maven.aliyun.com/repository/public' } 
            maven { name "Bstek" ; url 'https://nexus.bsdn.org/content/groups/public/' } 
            maven { name "M2" ; url 'https://plugins.gradle.org/m2/' }
        }
    }
}

配置 M2_HOME 环境变量

注意:这里配置中有 mavenLocal() 就是说明首先使用 maven 的本地仓库获取依赖。

如果要生效,则需要配置配置M2_HOME环境变量,操作如下:

变量名:M2_HOME
变量值:D:\JavaInstall\apache-maven-3.6.3(maven安装路径)

88001fc203222fe72e3f20f34870520b.png

拓展 1:启用init.gradle 文件的方法有:

1.在命令行指定文件,例如:gradle --init-script yourdir/init.gradle -q taskName。你可以多次输入此命令来指定多个init文件2.把init.gradle文件放到 USER_HOME/.gradle/ 目录下

1. 把以.gradle结尾的文件放到 USER_HOME/.gradle/init.d/ 目录下
2. 把以.gradle结尾的文件放到 GRADLE_HOME/init.d/ 目录下

如果存在上面的4种方式的2种以上,gradle会按上面的1-4序号依次执行这些文件,如果给定目录下存在多个init脚本,会按拼音a-z顺序执行这些脚本,每个init脚本都存在一个对应的gradle实例,你在这个文件中调用的所有方法和属性,都会委托给这个gradle实例,每个init脚本都实现了Script接口。

拓展 2:仓库地址说明

mavenLocal(): 指定使用maven本地仓库,而本地仓库在配置maven时settings文件指定的仓库位置。

如E:/repository,gradle 查找jar包顺序如下:USER_HOME/.m2/settings.xml >> M2_HOME/conf/settings.xml >> USER_HOME/.m2/repository

maven { url 地址},指定maven仓库,一般用私有仓库地址或其它的第三方库【比如阿里镜像仓库地址】。

mavenCentral():这是Maven的中央仓库,无需配置,直接声明就可以使用。

jcenter():JCenter中央仓库,实际也是是用的maven搭建的,但相比Maven仓库更友好,通过CDN分发,并且支持https访问,在新版本中已经废弃了,替换为了mavenCentral()。

总之, gradle可以通过指定仓库地址为本地maven仓库地址和远程仓库地址相结合的方式,避免每次都会去远程仓库下载依赖库。这种方式也有一定的问题,如果本地maven仓库有这个依赖,就会从直接加载本地依赖,如果本地仓库没有该依赖,那么还是会从远程下载。
但是下载的jar不是存储在本地maven仓库中,而是放在自己的缓存目录中,默认在USER_HOME/.gradle/caches目录,当然如果我们配置过`GRADLE_USER_HOME`环境变量,则会放在`GRADLE_USER_HOME/caches`目录,那么可不可以将gradle caches指向maven repository。
我们说这是不行的,caches下载文件不是按照maven仓库中存放的方式。

拓展 3:阿里云仓库地址请参考:https://developer.aliyun.com/mvn/guide

565de8eea8bf30efb2819ebea6609ad6.png

1.4 Gradle项目目录结构

Gradle项目默认的目录结构,和Maven项目的目录结构一致,都是基于约定大于配置

09018325d5f98ec3f5aca25af99a1e33.jpeg

Tips:

  • 只有war工程才有webapp目录,对于普通的jar工程,并没有webapp目录

  • gradlew与gradlew.bat执行的是wrapper版本中的gradle指令,而不是本地安装的gradle指令。(没啥用,能删了)

1.5 Gradle创建项目

Gradle 创建项目有多种方式,下面将会首先介绍两种:

  • 借助 spring 脚手架创建项目

  • 使用命令行的方式创建项目

1.5.1 借助 spring 脚手架创建项目

借助于 spring 脚手架创建gradle 第一个项目:https://start.spring.io/

140b6b06ba8f27276bc91352f9e70c37.png

b668033368644f4ba78d4d6b23e0cf15.png

将生成的 zip 包,解压缩后,查看目录结构如下:

f45c651b8693e45bcc64eab1721ccdca.png

与上图对比会发现:总体的目录结构与上图说明的是一致的。

- gradle 封装包装器文件夹
- src    源码文件夹
- gradlew
- gradlew.bat 包装器启动脚本
- build.gradle 构建脚本,类似maven的pom.xml
- settings.gradle 设置文件

1.5.2 使用命令行的方式创建项目

初始化命令:

gradle init

首先创建 demo2 目录,然后执行 gradle init 命令,初始化如下:

# 初始化 gradle 项目
D:\javaProject\demo\demo2>gradle init
Starting a Gradle Daemon (subsequent builds will be faster)

# 选择工程的类型,这里选择 2,初始化为应用工程
Select type of project to generate:
  1: basic
  2: application
  3: library
  4: Gradle plugin
Enter selection (default: basic) [1..4] 2

# 选择工程的语言:这里选择3,选择Java
Select implementation language:
  1: C++
  2: Groovy
  3: Java
  4: Kotlin
  5: Scala
  6: Swift
Enter selection (default: Java) [1..6] 3

# 选择单体应用、还是多模块应用:这里选择1,单体应用
Split functionality across multiple subprojects?:
  1: no - only one application project
  2: yes - application and library projects
Enter selection (default: no - only one application project) [1..2]

# 选择脚本语言:这里选择1,使用Groovy语言
Select build script DSL:
  1: Groovy
  2: Kotlin
Enter selection (default: Groovy) [1..2] 1

# 选择是否使用新的API:这里选择默认no
Generate build using new APIs and behavior (some features may change in the next minor release)? (default: no) [yes, no]

# 选择测试模块:这里选择JUnit4
Select test framework:
  1: JUnit 4
  2: TestNG
  3: Spock
  4: JUnit Jupiter
Enter selection (default: JUnit Jupiter) [1..4] 1

# 填写工程、包名
Project name (default: demo2):
Source package (default: demo2):

> Task :init
Get more help with your project: https://docs.gradle.org/7.4.2/samples/sample_building_java_applications.html

BUILD SUCCESSFUL in 45s
2 actionable tasks: 2 executed
D:\javaProject\demo\demo2>

生成的工程目录如下:

55d11d40e586a06e0f8fea11b62a97a2.png

虽然我们可以使用命令生成工程,不过一般开发也不会这样去做,所以这里熟悉一下就好了。

1.6 Gradle常用指令

  • gradle clean:清空build目录

  • gradle classes:编译业务代码和配置文件

  • gradle test:编译测试代码,生成测试报告

  • gradle build:构建项目

  • gradle build -x test:跳过测试,构建项目

1.6.1 gradle classes:编译业务代码和配置文件

我们进入前面创建的 demo 项目,然后执行 gradle classes 编译生成文件:

202c9bb8f8a7145604ba2470cf7debc3.png

af0447cbf2e53e87f4b47c501584d9d6.png

68245e4e95e8feb149505560439864cc.png

1.6.2 gradle clean:清空build目录

dea5449bbe40946bdd7b5edd48266ba6.png

1.6.3 gradle test:编译测试代码,生成测试报告

4f2edaa377cabfa602c75f3c24faf096.png

dd18e17c6eda1516f7c515b79864580c.png

1.6.4 gradle build -x test:跳过测试,构建项目

20a84c6f94d35b458c323c56d41c2b74.png

生成的jar包如下:

8150553b0d7e6cb35f18f5b6e016e647.png

1.7 Wrapper包装器

Gradle Wrapper 实际上就是对 Gradle 的一层包装,用于解决实际开发中可能会遇到的不同的项目需要不同版本的 Gradle问题。

例如:把自己的代码共享给其他人使用,可能出现如下情况:

  1. 对方电脑没有安装 gradle

  2. 对方电脑安装过 gradle,但是版本太旧了

这时候,我们就可以考虑使用 Gradle Wrapper 了。这也是官方建议使用 Gradle Wrapper 的原因。实际上有了 Gradle Wrapper 之后,我们本地是可以不配置 Gradle 的,下载Gradle 项目后,使用 gradle 项目自带的wrapper 操作也是可以的。

Gradle Wrapper  的 使用

那如何使用Gradle Wrapper 呢?

gradlew和gradlew.bat的使用方法与gradle的使用方法一样。区别如下:

  • 项目中的gradlew、gradlew.cmd脚本,调用的其实就是当前项目中wrapper规定的Gradle版本

  • 而我们使用gradle命令,指的就是本地电脑安装的Gradle版本。

1. 下载 gradlew 的 Gradle 版本压缩包

在 demo 工程目录下,我们可以看看 gradlew warpper 的配置文件,如下:

ae2f05014ab0cfadd1ec4ca5da560f5c.png

d9a150c09008a1a11ee48e000896062d.png

distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.1-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists

gradle-wrapper.properties 文件解读:

5ac2de6bf1381b203800cffc527084c4.png

注意:前面提到的 GRALE_USER_HOME 环境变量用于这里的Gradle Wrapper 下载的特定版本的gradle 存储目录。如果我们没有配置过GRALE_USER_HOME 环境变量,默认在当前用户家目录下的.gradle 文件夹中。

如果我们使用 gradlew 命令,那么将会执行对应的 distributionUrl 的 jar 包,执行如下:

gradlew --version

a172234b7806a3a29e6c495f097a9b3f.png

在上面执行 gradlew --version 的时候,下载对应版本的 zip 包,由于下载特别慢,导致解压报错。

解决的方式:

可以直接手动复制下载的地址进行下载,然后直接到 GRADLE_USER_HOME/wrapper/dists 进行解压如下:

57ca541699858ca4f2b2b092099d92a8.png

然后再次执行 gradlew --version 如下:

9a158f7a57c84fd719823dda2369e903.png

2.gradle指令 与 gradlew指令 使用的 Gradle 版本可以不同

b8d255eff688b3be4cd943150ee0265b.png

3.使用 gradle wrapper 控制 Gradle 版本

我们也可以在终端执行gradle 指令的时候,指定一些参数,来控制Wrapper的生成,比如:依赖的版本等

03ff77c70a3e38c54ab256b48643c17a.png

具体操作如下所示 :

gradle wrapper --gradle-version=7.4:升级wrapper版本号,只是修改gradle.properties中wrapper版本,未实际下载

gradle wrapper --gradle-version 5.2.1 --distribution-type all :关联源码用

4. GradleWrapper 的执行流程:

  1. 当我们第一次执行 ./gradlew build 命令的时候,gradlew 会读取 gradle-wrapper.properties 文件的配置信息

  2. 准确的将指定版本的 gradle 下载并解压到指定的位置(GRADLE_USER_HOME目录下的wrapper/dists目录中)

  3. 并构建本地缓存(GRADLE_USER_HOME目录下的caches目录中),下载再使用相同版本的gradle就不用下载了

  4. 之后执行的 ./gradlew 所有命令都是使用指定的 gradle 版本。如下图所示:

    9772a393379e9d3ebc7565f85efafd80.png

那什么时候选择使用 gradle wrapper、什么时候选择使用本地gradle?

下载别人的项目或者使用操作以前自己写的不同版本的gradle项目时:用Gradle wrapper,也即:gradlew

什么时候使用本地gradle?新建一个项目时: 使用gradle指令即可。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/644489.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

4--Gradle入门 - 创建普通的web工程

4--Gradle入门 - 创建普通的web工程 前言 上一篇,我们已经创建了java工程,本篇章再来创建web工程。 “ 其实没啥用,还是研究如何部署 Springboot 环境就好了 ” 创建普通的web工程 1. 新建 gradle 管理的工程项目 1685862847224 2. 设置项目使…

前端构建工具的未来

本文作者系360奇舞团前端开发工程师 本文为翻译 原文标题:The Future Of Frontend Build Tools 原文作者:Alexander Joseph 原文链接:https://www.smashingmagazine.com/2022/06/future-frontend-build-tools/ 前端构建工具对现代前端开发者的…

基于SpringCloud+Vue房产销售平台的设计与实现

博主介绍: 大家好,我是一名在Java圈混迹十余年的程序员,精通Java编程语言,同时也熟练掌握微信小程序、Python和Android等技术,能够为大家提供全方位的技术支持和交流。 我擅长在JavaWeb、SSH、SSM、SpringBoot等框架下…

数据库从业者在行业的变革下------越来越难

开头还是介绍一下群,如果感兴趣polardb ,mongodb ,mysql ,postgresql ,redis 等有问题,有需求都可以加群群内有各大数据库行业大咖,CTO,可以解决你的问题。加群请联系 liuaustin3 ,在新加的朋友会分到2群(共…

有趣的数学 依靠想象力的微积分

1、无限分割计算圆的面积 考虑将圆切成若干等份,下图为4等份。 下图为8等份。 下图为16等份。 下图为最终想象出来的极限矩形,据此分割为无穷等份的圆拼接为一个矩形。 矩形的面积 r * C / 2。 r为半径,C为周长。 2、夹逼法计算圆周率 借助…

使用SwinTransformer进行图片分类

SwinTransformer 是微软亚洲研究院在2021年提出的适用于CV领域的一种基于Tranformer的backbone结构。 它是 Shift Window Transformer 的缩写,主要创新点如下。 1,分Window进行Transformer计算,将自注意力计算量从输入尺寸的平方量级降低为线…

力扣刷题记录(一)剑指Offer(第二版)

1、本栏用来记录社招找工作过程中的内容,包括基础知识学习以及面试问题的记录等,以便于后续个人回顾学习; 暂时只有2023年3月份,第一次社招找工作的过程; 2、个人经历: 研究生期间课题是SLAM在无人机上的应用,有接触SLAM、Linux、ROS、C/C++、DJI OSDK等; 3、参加工作后…

【JVM系列】jvm内存结构详解

文章目录 前言HotSpot VM介绍内存结构程序计数器JVM栈本地方法栈Java堆方法区运行时常量池 永久代和元空间永久代(PermGen)元空间(Metaspace) 直接内存总结 前言 我们为什么要学习JVM? 面试的需要中高级程序员的必备技…

java的字符流

字符流的底层也是字节流。字符流字节流字符集。 特点是输入流一次读一个字节,遇到中文时,一次读多个字节(读多少个与字符集有关);输出流底层会把数据按照指定的编码方式进行编码,变成字节再写到文件中。 字…

AI绘图高级篇 第7篇 MJ以图换图-卡通头像

大家好,我是菜鸟哥 这个是我们MJ系列的第7篇,以前在会员群里发过,就是把头像做成卡通或者3D的效果还是很酷,或者是迪斯尼风格的。其实非常简单,就是用了一个MJ的以图换图的功能,今天给大家详细的说一下。 前…

ChatGPT 指南:如何与人工智能模型进行对话与互动

人工智能技术的快速发展使得我们能够与智能机器进行对话和互动。 ChatGPT 是一种基于 GPT-3.5 架构的强大语言模型,它能够进行自然语言处理,理解我们的问题并提供相应的回答。本文将为您提供使用 ChatGPT 进行对话和互动的详细指南。 1、提出问题 与 Cha…

Python爬虫之基础知识

爬虫基础知识 一、爬虫的概念 模拟浏览器,发送请求,获取响应 网络爬虫(又被称为网页蜘蛛,网络机器人)就是模拟客户端(主要指浏览器)发送网络请求,接收请求响应,一种按照一定的规则,…

基于springboot+mybatis+mysql+html企业人事管理系统

基于springbootmybatismysqlhtml企业人事管理系统 一、系统介绍二、功能展示1.用户登陆2.员工奖惩--员工3.合同管理--员工4.个人薪酬--员工5.培训管理--员工6.个人绩效--员工7.员工管理(管理员)8.奖惩管理(管理员)9.薪酬管理&…

华为OD机试真题B卷 JavaScript 实现【公共子串计算】,附详细解题思路

一、题目描述 给定两个只包含小写字母的字符串,计算两个字符串的最大公共子串的长度。 注:子串的定义指一个字符串删掉其部分前缀和后缀(也可以不删)后形成的字符串。 二、输入描述 输入两个只包含小写字母的字符串。 三、输…

chatgpt赋能python:Python使用的排大小方式全解析:关于SEO的学习!

Python使用的排大小方式全解析:关于SEO的学习! 对于一个Python工程师来说,深度理解编程语言的基础知识总是非常重要的,包括了语法、函数、模块、数据结构以及算法等等。而在SEO领域,Python所采用的排大小方式&#xf…

jdk动态代理和cglb动态代理

目录 概述 JDK动态代理 cglb动态代理 概述 动态代理和静态代理都是代理模式的实现方式,其主要区别在于代理类生成的时机和方式。 静态代理是在编译时就确定了代理类的代码,在程序运行前就已经存在了代理类的class文件。代理类与委托类的关系在编译时就…

STM32F407移植1588v2(ptpd)

硬件: STM32F407ZGT6开发板 软件: VSCode arm-none-eabi-gcc openOCD st-link 在github搜到一个在NUCLEO-F429ZI开发板上移植ptpd的example,因为和F407差别很小,所以就打算用这个demo移植到手头的开发板上。因为目前只需要…

【C语言】VScode中配置C语言/C++运行环境(保姆级图文)

目录 省流助手1. 下载安装VScode2. 下载编译器MinGW并解压3. 将MinGW添加至环境变量4. 安装vscode的插件5. 运行代码6. 调整和优化(这部分转自零流火星动力猿 2022.4.12)总结 欢迎关注 『C语言』 系列,持续更新中 欢迎关注 『C语言』 系列&am…

初识滴滴交易策略之三:供需调节

本篇文章分为: 1.什么是交易市场中的供需? 供需的动态性供需的相互作用 2.滴滴业务场景涉及的供需调节技术 供需感知和供需预测 时序预测供需调节以提升市场匹配程度,保持供需平衡 整数规划为司机规划更好的出车方式 模仿学习(Imi…

【工具篇】Maven使用${revision}实现多模块版本统一管理

背景说明 在使用Maven多模块结构工程时,版本管理是一件很繁琐且容易出错的事情。每次升级版本号都要手动调整或者通过mvn versions:set -DnewVerionxx命令去更改每一个子模块的版本号,非常的不方便,而且会改动所有的模块,出现如下…