• Gradle系列【1】概述、安装、创建工程、目录介绍


    有道无术,术尚可求,有术无道,止于术。

    常用构建工具介绍

    项目构建和管理需要工具,提供工程结构、代码编译打包、依赖管理、 二进制库管理等等功能,一般常用的有以下几种。

    Ant

    Ant 于2000年发布,是一个基于Java 开发的构建工具,Apache开源 ,但是用的人很少,几乎销声匿迹,感兴趣可以看看

    Maven

    官网地址

    2004年发布,采用项目对象模型 (POM) 的概念,几乎国人开发都使用这个,但Maven烦冗的XML配置是它最大的缺点。

    Gradle

    官方文档
    GitHub

    2012年,应用于google的一款项目管理工具,集Ant、Maven二者之大成,越来越多的开发者都将项目迁移到了Gradle上,比如Spring 、Spring Boot等等。

    Gradle概述

    Gradle 是一个开源构建自动化工具,其设计足够灵活,可以构建几乎任何类型的程序。

    以下是其一些最重要功能的高级概述:

    • 高性能:Gradle 实现了许多其他优化,构建速度快,开发团队不断努力提高 Gradle 的性能。
    • JVM基础:Gradle 在 JVM 上运行。
    • 扩展性:Gradle 支持插件机制,所以我们可以复用这些插件,就如同复用库一样简单方便。
    • IDE 支持:支持Android Studio、IntelliJ IDEA、Eclipse 和 NetBeans。Gradle 还支持生成将项目加载到 Visual Studio 所需的解决方案。
    • Gradle 是 Android 的官方构建工具,支持多种流行语言和技术。

    缺点

    • 版本向下兼容性不是很好,目前新版为7.X版本
    • 学习成本高,需要学习groovy脚本语言

    安装

    可以在 Linux、macOS 或 Windows 上安装 Gradle 构建工具。

    下载地址
    在这里插入图片描述
    下载后解压:
    在这里插入图片描述
    直接解压就行了,但是需要安装JDK1.8或更高版本,Gradle 带有自己的 Groovy 库,因此不需要安装 Groovy,Gradle 会忽略任何现有的 Groovy 安装,也就是使用内置的Groovy 。

    添加环境变量GRADLE_HOME,变量值为解压目录。
    在这里插入图片描述
    在Path 中加入%GRADLE_HOME%\bin
    在这里插入图片描述

    输入gradle -v查看是否配置成功,很简单,和安装JDK一样。
    在这里插入图片描述

    使用IDEA 创建一个Gradle 项目

    选择Gradle构建一个普通的JAVA Web 程序。
    在这里插入图片描述

    创建的工程目录如下:
    在这里插入图片描述

    Gradle 使用的目录和文件

    Gradle 使用两个主要目录来执行和管理其工作:Gradle 用户主目录项目根目录

    用户目录

    用户目录在当前电脑登录的用户名目录下:
    在这里插入图片描述
    Gradle 用户主目录($USER_HOME/.gradle)用于存储全局配置属性和初始化脚本以及缓存和日志文件。大致结构如下:

    ├── caches // 全局缓存目录(适用于非项目特定的所有内容)
    │   ├── 4.8 //特定于版本的缓存(例如,支持增量构建)
    │   ├── 4.9 
    │   ├── ⋮
    │   ├── jars-3  // 共享缓存(例如,用于依赖项的工件)
    │   └── modules-2 
    ├── daemon  // Gradle 守护进程的注册表和日志
    │   ├── ⋮
    │   ├── 4.8
    │   └── 4.9
    ├── init.d  // 全局初始化脚本
    │   └── my-setup.gradle
    ├── jdks // 工具链支持下载的JDK
    │   ├── ⋮
    │   └── jdk-14.0.2+12
    ├── wrapper
    │   └── dists   // Gradle Wrapper下载的发行版
    │       ├── ⋮
    │       ├── gradle-4.8-bin
    │       ├── gradle-4.9-all
    │       └── gradle-4.9-bin
    └── gradle.properties  // 全局Gradle 配置属性
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    从 4.10 版本开始,Gradle 会自动清理其用户主目录。当 Gradle 守护程序停止或关闭时,清理会在后台运行。

    项目根目录

    项目根目录大致结构如下:

    ├── .gradle  // Gradle 生成的项目特定缓存目录
    │   ├── 4.8  // 特定于版本的缓存(例如,支持增量构建)
    │   ├── 4.9 
    │   └── ⋮
    ├── build // 此项目的构建目录,Gradle 在其中生成所有构建工件。
    ├── gradle // 	包含Gradle Wrapper的 JAR 文件和配置
    │   └── wrapper 
    ├── gradle.properties  // 	项目特定的Gradle 配置属性
    ├── gradlew  // 	使用Gradle Wrapper执行构建的脚本
    ├── gradlew.bat // 	使用Gradle Wrapper执行构建的脚本
    ├── settings.gradle or settings.gradle.kts  // 	定义子项目列表的项目设置文件
    ├── subproject-one  // 通常一个项目被组织成一个或多个子项目
    |   └── build.gradle or build.gradle.kts  // 每个子项目都有自己的 Gradle 构建脚本
    ├── subproject-two 
    |   └── build.gradle or build.gradle.kts 
    └── ⋮
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    从 4.10 版本开始,Gradle 会自动清理项目特定的缓存目录。构建项目后,会定期(最多每 24 小时)检查特定版本的缓存目录.gradle/<gradle-version>/是否仍在使用中。如果 7 天未使用它们,它们将被删除。

    build.gradle

    build.gradle是项目的构建配置文件,和pom.xml类似,可以管理依赖、配置、插件等。

    默认最基础的结构如下:

    // 插件 
    plugins {
        id 'java'
        id 'war'
    }
    // 机构
    group 'com.ali'
    // 版本
    version '1.0-SNAPSHOT'
    // JDK 编译版本
    sourceCompatibility = 1.8
    // 仓库地址
    repositories {
    	// Maven中央仓库,http://repo1.maven.org/maven2/
    	// jCenter:是由JFrog公司提供的Bintray中的Java仓库
        mavenCentral()
    }
    // 第三方依赖包
    dependencies {
        testCompile group: 'junit', name: 'junit', version: '4.11'
        testCompile group: 'junit', name: 'junit', version: '4.12'
        implementation 'com.alibaba:fastjson:2.0.6'
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    settings.gradle

    settings.gradle 无论有多少个子模块,该文件只会有一个,且一定在根项目中,它的主要作用是配置项目或者依赖之间的关系。

    默认只有一个根目录文件的名称:

    rootProject.name = 'a-gradle'
    
    • 1

    gradlew.bat

    Windows 环境下当前工程gradle环境命令执行脚本,比如gradlew.bat -v查看当前工程下的gradle版本,明明我们之前安装的版本为7.4,这里为啥又是5.2.1呢?(后面分析)
    在这里插入图片描述

    gradlew

    Linux 环境下当前工程gradle环境命令执行脚本。

    gradle.wrapper

    wrapper是创建项目时自动下载的一个文件夹,该目录下有2个文件:gradle-wrapper.jargradle-wrapper.properties

    ├── gradle 
    │   └── wrapper
    │       ├── gradle-wrapper.jar
    │       └── gradle-wrapper.properties
    
    • 1
    • 2
    • 3
    • 4

    查看gradle-wrapper.properties

    // 系统用户目录
    distributionBase=GRADLE_USER_HOME
    // 下载位置
    distributionPath=wrapper/dists
    // 下载的gradle的地址,使用的版本
    distributionUrl=https\://services.gradle.org/distributions/gradle-5.2.1-bin.zip
    // 安装基础目录
    zipStoreBase=GRADLE_USER_HOME
    // 安装子目录
    zipStorePath=wrapper/dists
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    在C 盘用户目录,可以看到当前工程帮我们下载的Gradle。
    在这里插入图片描述
    由此可见wrapper目录的主要作用是配置并下载当前工程的Gradle环境,但是奇怪的是之前我们不是已经安装了Gradle了吗?为啥还要下载?

    这是因为gradle发版本比较快,而且大多数不向下兼容,如果有一个项目使用的Gradle版本为5.0,你本地环境是7.0,那么很可能就无法使用7.0 版本的Gradle来编译打包,为了解决这种问题,Gradle就想出包装的做法,每个工程都会有自己单独的Gradle包装构建环境。。。这也是比较麻烦的一点。。。。

    Wrapper 工作流程如下所示:

    1. 自动下载该工程声明的Gradle 版本
    2. 存储到用户目录下
    3. 构建项目时,使用当前的Gradle 环境
      在这里插入图片描述

    .gradle

    .gradle是Gradle 生成的项目特定缓存目录,每个版本创建一个缓存目录(例如,支持增量构建)。
    在这里插入图片描述

    build

    build目录用于存放编译、打包的文件。

    Gradle 工具栏

    在IDEA 最右侧,和Maven 一样,也有一个工具栏按钮,打开之后可以看到该工程的依赖和任务。

    在这里插入图片描述
    Source Sets包含了maintest 两个目录,分别显示当前程序主目录和测试目录包含的所有依赖包。
    在这里插入图片描述
    Tasks下包含多个任务,它是Gradle中最小的执行单元,和Maven 中的目标一样,也可以直接理解为一个功能,如下图所示中,
    可以看到已经分好类的众多任务:
    在这里插入图片描述

  • 相关阅读:
    leetcode每日一题30
    Postgresql源码(116)提升子查询案例分析
    jwt 实现用户登录完整java
    Android开发常见问题收集(长期更新)
    7. 用Rust手把手编写一个wmproxy(代理,内网穿透等), HTTP及TCP内网穿透原理及运行篇
    【JVM】类加载
    Linux:kubernetes(k8s)有状态的服务部署(14)
    导数求函数的单调性与极值
    Django-request请求
    Linux安全之SSL基础
  • 原文地址:https://blog.csdn.net/qq_43437874/article/details/125330638