• 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'
    }
    
    • 1
    • 2
    • 3

    依赖管理

    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'
    
    • 1

    比如下图中,就使用了我们自定义的版本号,但是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"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    插件依赖管理

    引入依赖管理插件后,有两种方式来实现依赖管理:

    • 使用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'
                }
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    导入 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'
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    很多第三方框架,比如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'
    }
    
    • 1
    • 2
    • 3

    也可以使用Spring Boot DSL的属性在项目范围内配置主类名称:

    springBoot {
    	mainClass = 'com.example.ExampleApplication'
    }
    
    • 1
    • 2
    • 3
  • 相关阅读:
    Django老项目升级到新版本
    2023沈阳师范大学计算机考研信息汇总
    [PSQL] 窗口函数、GROUPING运算符
    HtmlAgilityPack中使用xpath获取属性值
    Go 语言为什么建议多使用切片,少使用数组?
    不知道PDF文件转Word文件怎么转?分享3个自用方法
    11个精美网页——Web前端开发技术课程大作业,期末考试,Dreamweaver简单网页制作
    零基础自学javase黑马课程第九天数组练习
    【无标题】
    DB2和mysql活动日志满了会自动回滚最早未提交的事务吗?
  • 原文地址:https://blog.csdn.net/qq_43437874/article/details/125381846