有道无术,术尚可求,有术无道,止于术。
插件说明
Spring Boot 官方提供了Gradle
插件支持,可以打包程序为可执行的 jar 或 war 包,运行 Spring Boot 应用程序,并使用spring-boot-dependencies
,兼容的版本为 Gradle 6.8、6.9 或 7.x。
引入插件
官网插件已发布到 Gradle 官网插件库中,可以直接使用plugins
引用:
plugins {
id 'org.springframework.boot' version '2.7.0'
}
依赖管理
bom
首先我们回顾下Maven
中的 bom
,BOM (Bill Of Material 材料清单)
是 Maven 仓库中的一个概念。
一个JAVA 项目,需要引用很多依赖jar 包,如果不进行统一版本控制,很容易造成版本冲突问题,这个时候,我们就可以编写一个Pom 文件,将相关框架的版本都定义好,在dependencyManagement
中声明框架和版本号,然后将其打包为jar,这个编写版本的文件就是一个bom
。
其他项目就可以直接引入这个bom
包,在使用其他框架包时,如果没有声明版本号,会去dependencyManagement
中找到该框架的版本号,这样就可以实现版本统一,避免冲突了。
Spring Boot
就使用了这种方式来管理版本号,这个模块就是 spring-boot-dependencies
,用户在使用 Spring Boot Starter
相关依赖时引入特定版本的 spring-boot-dependencies
,然后在引入其它依赖时只需要声明 group 和 name 即可,不需要再指定版本号了。
依赖管理插件
要管理 Spring Boot
应用程序中的依赖项,您可以应用io.spring.dependency-management
插件或使用 Gradle 的原生 bom 支持。前者的主要好处是它提供了托管版本的基于属性的定制,而使用后者可能会导致更快的构建。
应用io.spring.dependency-management
插件时,Spring Boot
的插件会自动从你正在使用的 Spring Boot 版本中导入spring-boot-dependencies
bom 管理。也就是该插件会根据你声明的 Spring Boot 版本引入相关版本的 bom。
我们可以在Gradle 插件中搜索该插件。
在build.gradle
中声明插件,就可以看到我们引入的依赖包,没有写版本号,但是插件帮我们实现了版本控制。
要自定义版本号,可以通过ext
来指定。
ext['slf4j.version'] = '1.7.20'
比如下图中,就使用了我们自定义的版本号,但是Spring Boot
针对
第三方依赖项进行设计和测试,覆盖版本可能会导致兼容性问题,所以最好还是使用其已经定义好的版本。
如果想使用快照,如以下示例所示:
buildscript {
repositories {
maven { url 'https://repo.spring.io/plugins-snapshot' }
}
dependencies {
classpath 'io.spring.gradle:dependency-management-plugin:<<snapshot-version>>'
}
}
apply plugin: "io.spring.dependency-management"
插件依赖管理
引入依赖管理插件后,有两种方式来实现依赖管理:
-
使用DSL 直接声明依赖的版本
-
导入一个或多个现有的 Maven bom。
依赖管理 DSL
使用 DSL 直接配置依赖的坐标和版本,如下例所示:
dependencyManagement {
// 1. 声明某个依赖的版本号
dependencies {
dependency 'com.alibaba:fastjson:1.2.58'
// 写法2
// dependency group:'org.springframework', name:'spring-boot-starter-json', version:'2.6.8'
}
// 2. 设置相同 group 的依赖的统一版本号
dependencies {
dependencySet(group:'org.slf4j', version: '1.7.7') {
entry 'slf4j-api'
entry 'slf4j-simple'
}
}
//3. 排除依赖中的某个依赖
dependencies {
dependency('org.springframework:spring-core:4.0.3.RELEASE') {
exclude 'commons-logging:commons-logging'
}
}
// 4. 排除某个group 依赖
dependencies {
dependencySet(group:'org.springframework', version: '4.1.4.RELEASE') {
entry('spring-core') {
exclude group: 'commons-logging', name: 'commons-logging'
}
}
}
}
导入 Maven Bom
该插件还允许导入现有的 Maven bom
以利用其依赖项管理,如以下示例所示:
dependencyManagement {
// 导入 Maven Bom
imports {
mavenBom 'org.springframework.cloud:spring-cloud-dependencies:2020.0.3'
// 导入时,可以覆盖版本号
mavenBom('io.spring.platform:platform-bom:1.0.1.RELEASE') {
bomProperty 'spring.version', '4.0.4.RELEASE'
}
}
}
很多第三方框架,比如Spring Cloud 、Dubbo 等,都会有自己的 bom,使用这种方式就很容易实现依赖控制,如下所示,我们引入了,再引入 Open Fiegn 时就不需要指定版本了。
注意:导入了多个 bom时,如果多个 bom 为同一个依赖项提供依赖项管理,则将使用最后一个 bom 的依赖项管理。
打包为可执行JAR
首先我们使用Gradle 构建一个简单的Spring Boot 程序并启动,按照上面的文档添加插件及依赖。
点击工具栏中的bootJar
执行构建任务。
一秒钟不到,就构建好了,神速。。。然后在build/llibs
目录下就可以看到JAR 包了。
打开CMD ,使用java -jar
启动:
其他打包构建任务有:
- bootWar:打包成war 包
配置启动类
默认情况下,可执行JAR 包 的主类将通过在类路径的目录中查找具public static void main(String[])
方法的类来自动配置。
也可以使用任务的mainClass
属性显式配置主类:
tasks.named("bootJar") {
mainClass = 'com.example.ExampleApplication'
}
也可以使用Spring Boot DSL的属性在项目范围内配置主类名称:
springBoot {
mainClass = 'com.example.ExampleApplication'
}