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


文章目录

  • 插件说明
  • 引入插件
  • 依赖管理
  • bom
  • 依赖管理插件
  • 插件依赖管理
  • 依赖管理 DSL
  • 导入 Maven Bom
  • 打包为可执行JAR
  • 配置启动类


插件说明

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 插件中搜索该插件。

javaspringboot 插件库 springboot插件化应用_javaspringboot 插件库


build.gradle中声明插件,就可以看到我们引入的依赖包,没有写版本号,但是插件帮我们实现了版本控制。

javaspringboot 插件库 springboot插件化应用_java_02


要自定义版本号,可以通过ext 来指定。

ext['slf4j.version'] = '1.7.20'

比如下图中,就使用了我们自定义的版本号,但是Spring Boot 针对第三方依赖项进行设计和测试,覆盖版本可能会导致兼容性问题,所以最好还是使用其已经定义好的版本。

javaspringboot 插件库 springboot插件化应用_javaspringboot 插件库_03


如果想使用快照,如以下示例所示:

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 时就不需要指定版本了。

javaspringboot 插件库 springboot插件化应用_gradle_04

注意:导入了多个 bom时,如果多个 bom 为同一个依赖项提供依赖项管理,则将使用最后一个 bom 的依赖项管理。

打包为可执行JAR

首先我们使用Gradle 构建一个简单的Spring Boot 程序并启动,按照上面的文档添加插件及依赖。

javaspringboot 插件库 springboot插件化应用_gradle_05


点击工具栏中的bootJar 执行构建任务。

javaspringboot 插件库 springboot插件化应用_javaspringboot 插件库_06


一秒钟不到,就构建好了,神速。。。然后在build/llibs 目录下就可以看到JAR 包了。

javaspringboot 插件库 springboot插件化应用_spring_07


打开CMD ,使用java -jar 启动:

javaspringboot 插件库 springboot插件化应用_java_08


其他打包构建任务有:

  • bootWar:打包成war 包

配置启动类

默认情况下,可执行JAR 包 的主类将通过在类路径的目录中查找具public static void main(String[])方法的类来自动配置。

也可以使用任务的mainClass属性显式配置主类:

tasks.named("bootJar") {
	mainClass = 'com.example.ExampleApplication'
}

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

springBoot {
	mainClass = 'com.example.ExampleApplication'
}