Gradle系列【7】使用Spring Boot Gradle 插件实现依赖管理和打包

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

插件说明

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 中的 bomBOM (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-dependenciesbom 管理。也就是该插件会根据你声明的 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'
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

墨 禹

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值