1、Gradle

Gradle

Gradle构建工具是一个快速、可靠和适应性强的开源构建自动化工具,具有优雅和可扩展的声明性构建语言,Gradle包含许多优势:

Gradle支持Android、Java、Kotlin Multiplatform、Groovy、Scala、Javascript和C/C++等热门语言的构建工作

安装

在开始安装之前,首先确保您已经安装好Java环境(使用java --version命令进行查看)版本不能低于Java 8

访问官方网站:https://docs.gradle.org/current/userguide/installation.html#installation

image-20250324172733695

按照官网教程下载压缩包,并配置环境变量

配置完成后,使用命令gradle -v可查看版本

image-20250324173203853

配置Gradle本地仓库

特别注意:这里我们接着再配置GRALE_USER_HOME环境变量:GRALE_USER_HOME相当于配置Gradle本地仓库位置和GradleWrapper缓存目录。

Gradle本地仓库可以和Maven本地仓库目录一致,但是不建议,因为两者包管理方式不一样

配置Gradle镜像

GRADLE_HOME下的init.d目录中创建文件:init.gradle

写入如下配置

allprojects {
    repositories { 
        mavenLocal() 
        maven { name "Alibaba" ; url "https://maven.aliyun.com/repository/public" } 
        // 私服配置
        // maven {
        //     url = uri("http://your-company-repo-url/repository/maven-releases/")
        //     credentials {
        //         username = 'your-username' // 用户名
        //         password = 'your-password' // 密码
        //     }
        // }
        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/' }
        }
    }
}

创建Gradle项目

image-20250324173604099

Gradle项目目录结构

Gradle中的常用指令

命令 说明
gradle clean 清空 build 目录
gradle classes 编译业务代码和配置文件
gradle test 编译测试代码,生成测试报告
gradle build 构建项目
gradle build -x test 跳过测试构建项目

需要注意的是:gradle的指令要在含有build.gradlebuild.gradle.kts的目录执行 。

gradle 和 gradlew 的区别

创建一个 Gradle 项目,会发现项目目录中有gradlewgradlew.bat两个文件,那么使用这两个文件执行命令和使用gradle命令的区别如下:

gradlegradlew 都用于执行Gradle构建任务,但它们之间有一些关键区别

总结

项目配置文件

settings.gradle

配置文件settings.gradle是整个Gradle项目的入口点:

image-20240113150604473

配置文件用于定义所有的子项目,并让它们参与到构建中,Gradle支持单项目和多项目的构建:

配置文件可以使用Groovy语言(名称为settings.gradle)或是Kotlin语言(名称为settings.gradle.kts)编写,后面我们一律采用Kotlin语言,设置文件通常位于项目的根目录中

一个标准的Gradle设置文件按照以下样式进行编写,这里使用Kotlin语言介绍:

rootProject.name = "root-project"   //rootProject对象代表当前这个项目,其name属性就是当前项目的名称

include("sub-project-a")     //所有的子项目使用include()函数进行添加,如果没有子项目可以不写
include("sub-project-b")
include("sub-project-c")

当找到设置文件settings.gradle(.kts)时,Gradle会实例化一个Settings对象,我们可以通过此对象来声明要包含在构建中的所有项目,包括我们项目名称的声明也是通过它来完成

settings.rootProject.name = "untitled"

//可以省略掉settings直接使用其提供的属性
rootProject.name = "untitled"

其中,Settings对象包含以下常用属性:

名称 描述
buildCache 项目构建所用缓存配置。
plugins 用于设置的插件。
rootDir 项目构建的根目录,根目录是整个项目目录最外层。
rootProject 构建的根项目。
settings 返回设置对象。

在Gradle中,和Maven一样也分为插件和依赖,我们可以在settings.gradle.kts中可以为所有的项目进行统一配置,比如要修改获取插件的仓库位置

pluginManagement {   //使用pluginManagement函数配置插件仓库列表
    repositories {   //在repositories函数中配置需要用的仓库
        gradlePluginPortal()   //Gradle插件仓库
        google()    //Google插件仓库
    }
}

我们也可以修改为国内的阿里云镜像

pluginManagement {
    repositories {
      	//手动指定maven仓库地址,修改URL地址
        maven {
            setUrl("https://maven.aliyun.com/repository/public/")
        }
    }
}

同样的,对于所有的依赖,也可以直接配置为国内的阿里云镜像仓库

dependencyResolutionManagement {   //依赖解析管理中可以配置全局依赖仓库
    repositories {  //只不过这种方式目前还在孵化阶段,可能会在未来某个版本移除
        maven {
            setUrl("https://maven.aliyun.com/repository/public/")
        }
    }
}

不过,除了在settings.gradle.kts中配置三方仓库之外,我们更推荐在build.gradle.kts中对仓库进行配置。

build.gradle

针对于单个项目的构建文件,其中gradle.build文件就是对应的构建配置,这里我们使用的是Kotlin语言,因此项目中会存在一个gradle.build.kts文件

plugins {
    kotlin("jvm") version "1.8.0"
    application
}

group = "top.ygang"
version = "1.0-SNAPSHOT"

repositories {
    mavenCentral()
}

dependencies {
    testImplementation(kotlin("test"))
}

tasks.test {
    useJUnitPlatform()
}

kotlin {
    jvmToolchain(8)
}

application {
    mainClass.set("MainKt")
}

可以看到,在这个配置文件中存在大量的Lambda语句,这也使得整个配置文件写起来更加简介美观,所以说虽然Gradle依赖于JVM平台,但是仅支持Kotlin和Groovy,它们相比Java在语法上存在更大的优势,更适合编写这种类似脚本一样的配置文件。

对于设置文件中包含的每个项目,Gradle都会为其创建一个Project实例对象,我们可以直接在build.gradle.kts中使用

group = "top.ygang"
version = "1.0-SNAPSHOT"

//本质上就是project的属性
project.group = "top.ygang"   //本质上就是project的属性
project.version = "1.0-SNAPSHOT"

在此对象中,包含以下常见属性

名称 类型 描述
name String 项目目录的名称。
path String 该项目的完全限定名称。
description String 该项目的描述。
dependencies DependencyHandler 配置项目的依赖列表。
repositories RepositoryHandler 配置项目的依赖仓库。
layout ProjectLayout 通过此对象来访问项目中的关键位置。
group Object 项目的组。
version Object 项目的版本。

plugins

最顶上的plugins函数,后面的Lambda中编写了当前项目需要使用到的插件

一般情况下,我们普通的Java项目可以直接使用java插件,它能够直接完成编译和打包Java代码

plugins {
    id("java")
}
// 或者这样写
plugins {
    java
}

如果我们需要将项目打包为一个可执行的文件,也可以使用application插件,它包含java插件的全部功能,同样支持编译和打包Java代码,并且支持生成可执行的应用程序

plugins {
    id("application")
}

java {   //configure<JavaApplication> 也可以直接写成 java 这个扩展函数,效果一样
    targetCompatibility = JavaVersion.VERSION_17
    sourceCompatibility = JavaVersion.VERSION_17
}

application {   //同configure<JavaApplication>
    mainClass = "top.ygang.Main"  //配置主类
}

group和version

设置了当前项目所属的组名称和版本

group = "top.ygang"
version = "1.0-SNAPSHOT"

repositories

所有依赖的仓库配置,默认使用的是Maven中心仓库

repositories {
    mavenCentral()
}

tasks.test

任务相关配置,这里对test任务进行了相关配置

tasks.test {
    useJUnitPlatform()
}