编辑历史
2023-08-01 14:42 23:12,为了控制文章阅读长度(为了获得今日份掘友分)因此拆分为两部分,这部分会记录一下我对Gradle的构建脚本文件build.gradle的折腾经历,包括折腾的一些插件,构建配置,依赖项等。
我是一个 Gradle Java Spring Boot 项目
项目的根目录指的是与 build.gradle 文件同级的目录
参考资料
Gradle 相关概念简介
Gradle丰富的API 、成熟的插件和集成生态 可以帮助我们实现自动化。在深入了解Gradle的细节之前了解一些与Gradle有关的概念对我们来说是有帮助的。
项目[Projects]是Gradle构建的对象,可以被打包为 Jar、War 甚至是 zip 文件。位于项目根目录中的build.gradle构建脚本文件为项目定义了任务、依赖项、插件和其他配置。
任务[Tasks]是单独的一小份工作。Tasks定义了执行工作的一些逻辑,如编译代码、运行测试和部署代码。插件[Plugins]可以提供更多类型的任务。
插件[Plugins]允许在任务、文件和依赖项配置之外的构建中引入新概念。在Gradle中有两种类型的插件:script、binary
构建[Builds]是 Gradle 项目中任务集合的执行。在Gradle中构建
'plugins' 无法应用于 '(groovy.lang.Closure)'
我遇到过在构建脚本build.gradle中出现 plugins 无法应用于 (groovy.lang.Closure) 的提醒(这应该不算错误吧,程序可以正常运行),这可能是因为使用了旧版本的 Gradle。然后,我没有搞定~
在较旧的 Gradle 版本中,使用 plugins 块时需要在 buildscript 块内部进行声明。
请参考以下示例来正确配置 buildscript 和 plugins 块:
buildscript {
repositories {
// 定义你的仓库
mavenCentral()
}
dependencies {
// 定义你的依赖项
classpath 'org.springframework.boot:spring-boot-gradle-plugin:x.x.x'
}
}
plugins {
id 'org.springframework.boot' version 'x.x.x'
}
// 其他配置
将 x.x.x 替换为实际的 Spring Boot 版本号。
另一种姿势
升级 Gradle 版本到更高的版本。将Windows计算机上的Gradle版本升级到了 Gradle 8.2.1
gradle -v 查看最新版本
------------------------------------------------------------
Gradle 8.2.1
------------------------------------------------------------
Build time: 2023-07-10 12:12:35 UTC
Revision: a38ec64d3c4612da9083cc506a1ccb212afeecaa
Kotlin: 1.8.20
Groovy: 3.0.17
Ant: Apache Ant(TM) version 1.10.13 compiled on January 4 2023
JVM: 1.8.0_333 (Oracle Corporation 25.333-b02)
OS: Windows 10 10.0 amd64
IDEA 构建 Gradle
使用来自此位置的Gradle:
1、gradle-wrapper.properties
2、Gradle构建脚本中的Wrapper任务
3、指定位置
在构建脚本build.gradle中添加自定义任务
Gradle的构建脚本只不过是Groovy语句:
入门
task hello {
doLast {
println 'hello world'
}
}
通过 gradlew 脚本使用Gradle Wrapper 运行: ./gradlew hello
> Task :hello
hello world
BUILD SUCCESSFUL in 869ms
1 actionable task: 1 executed
任务间依赖
我们可以定义依赖于其他任务的任务。可以通过在任务定义中传递 dependOn: taskName 参数来定义任务依赖关系:
task libtask {
doLast {
println 'lib is using!'
}
}
task servicetask(dependsOn: libtask) {
doLast {
println "service working"
}
}
./gradlew servicetask
> Task :libtask
lib is using!
> Task :servicetask
service working
BUILD SUCCESSFUL in 845ms
2 actionable tasks: 2 executed
任务属性
task ourTask {
ext.propertyName = "value"
}
Gradle 插件
Gradle 插件是一组功能的集合,可以扩展 Gradle 构建系统的能力。插件可以用于执行各种构建任务、管理依赖关系、生成文档等。Gradle 提供了许多常用的插件,如 Java 插件、Android 插件、Spring Boot 插件等,也可以自定义开发插件来满足特定需求。
在 Gradle 2.1 版本之前,应用插件有两种声明方式:传统插件声明方式(Legacy Plugin Application)和新插件声明方式(New Plugin Application)。
Gradle 2.1 版本之后引入了插件 ID 的概念。插件 ID 是唯一标识一个 Gradle 插件的字符串,通常以 id 'plugin-id' 的形式出现。每个插件都有一个特定的 ID,例如 java 插件的 ID 是 java,android 插件的 ID 是 com.android.application
传统的插件声明方式不再被推荐使用,新的插件声明方式更加简洁和灵活,并且提供了更好的可维护性和可扩展性。
新的插件声明方式
以之前生成的build.gradle文件中的插件声明内容为例,新的插件声明方式使用 plugins{} 块来声明插件
plugins {
id 'java'
id 'org.springframework.boot' version '2.7.14'
id 'io.spring.dependency-management' version '1.0.15.RELEASE'
}
使用 Plugins DSL 应用 Binary Plugins
Plugins DSL 具有一些限制:
1、在 plugins{} 块中不支持Groovy代码
2、plugins{} 块必须在 build.gradle 构建脚本的最顶端(在它之前只允许 buildscripts{} 块)
3、Plugins DSL 不能用脚本插件、settings.gradle 文件或初始化脚本编写
Plugins DSL 依然在改进中,随着版本的不断迭代可能会有一些变化。
传统的插件声明方式
传统的插件声明方式是通过 apply plugin 语句 在 build.gradle 构建脚本中声明要应用的插件。语法为 apply plugin: 'plugin-id',其中 plugin-id是要应用的插件的唯一标识。
需要确保构建脚本中已经配置了所需插件的依赖项。通常,插件的依赖项可以通过 buildscript{} 块中的 dependencies 部分进行配置。
buildscript {
repositories {
maven {
url "https://plugins.gradle.org/m2/"
}
}
dependencies {
classpath "org.shipkit:shipkit:2.3.5"
}
}
apply plugin: "org.shipkit.bintray-release"
依赖管理
待补充~
多项目的构建
待补充~