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
按照官网教程下载压缩包,并配置环境变量
配置完成后,使用命令gradle -v
可查看版本
特别注意:这里我们接着再配置GRALE_USER_HOME
环境变量:GRALE_USER_HOME
相当于配置Gradle本地仓库位置和GradleWrapper缓存目录。
Gradle本地仓库可以和Maven本地仓库目录一致,但是不建议,因为两者包管理方式不一样
在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/' }
}
}
}
allprojects
:表示全局配置
repositories
:项目需要依赖的jar包,会从repositories
指定的仓库去下载
mavenLocal
:从本地 Maven 仓库查找依赖,需要电脑配置到Maven的环境变量,变量名为 M2_HOME
maven
:自定义 Maven 仓库镜像mavenCentral
:Maven 中央仓库buildscript
:是给 build.gradle
使用的,即如果构建脚本本身需要一些依赖,它就会去这个指定的仓库去下载.gradle
:Gradle自动生成的项目缓存目录。.idea
:这个是IDEA的项目配置目录,跟Gradle生成的没关系,无视掉就行。app
:存放整个项目的源代码、测试等,这里面就是我们写代码的地方了。
build.gradle.kts
:项目的gradle构建脚本。src
:存放源代码和测试代码。
main
:编写所有项目核心代码。test
:编写项目测试代码。gradle
:包含JAR文件和Gradle Wrapper的配置。gradlew
:适用于macOS和Linux的使用Gradle Wrapper执行构建的脚本(这里的版本就是GradleWrapper指定的版本)gradlew.bat
:适用于Windows的使用Gradle Wrapper执行构建的脚本。settings.gradle.kts
:定义子项目列表的项目配置文件,也是最关键的设置文件。build
:封装编译后的字节码、打成的包Jar、War、测试报告等信息命令 | 说明 |
---|---|
gradle clean | 清空 build 目录 |
gradle classes | 编译业务代码和配置文件 |
gradle test | 编译测试代码,生成测试报告 |
gradle build | 构建项目 |
gradle build -x test | 跳过测试构建项目 |
需要注意的是:gradle的指令要在含有build.gradle
或build.gradle.kts
的目录执行 。
创建一个 Gradle 项目,会发现项目目录中有gradlew
和gradlew.bat
两个文件,那么使用这两个文件执行命令和使用gradle
命令的区别如下:
gradle
和 gradlew
都用于执行Gradle构建任务,但它们之间有一些关键区别
gradle
系统级安装:gradle 命令需要你在系统上手动安装Gradle。这意味着你需要自己管理Gradle版本。
全局配置:由于是系统级安装,所有使用 gradle 命令的项目将共享相同的Gradle版本,除非你明确地为每个项目指定不同的版本。
版本冲突:如果不同的项目需要不同版本的Gradle,使用 gradle 可能会导致版本冲突。
gradlew(Gradle Wrapper)
项目级安装:gradlew(Gradle Wrapper)是一个项目级的工具,它自动下载你项目所需的正确版本的Gradle。这意味着你不需要在系统上手动安装Gradle。
版本隔离:由于每个项目都有自己的Gradle Wrapper,因此不同项目可以轻易地使用不同版本的Gradle,而不会互相影响。
便于协作:使用Gradle Wrapper意味着所有开发者和CI/CD环境都将使用相同版本的Gradle,这使得构建更加可预测和可重复。
自动化和便捷性:由于Gradle Wrapper自动管理Gradle版本,因此它特别适用于自动化构建和持续集成。
gradlew
通常更为推荐,因为它提供了更好的版本管理和项目隔离。gradle
也是可以的配置文件settings.gradle
是整个Gradle项目的入口点:
配置文件用于定义所有的子项目,并让它们参与到构建中,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
中对仓库进行配置。
针对于单个项目的构建文件,其中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函数,后面的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 = "top.ygang"
version = "1.0-SNAPSHOT"
所有依赖的仓库配置,默认使用的是Maven中心仓库
repositories {
mavenCentral()
}
任务相关配置,这里对test
任务进行了相关配置
tasks.test {
useJUnitPlatform()
}