首页 > 其他分享 >两种方式实现SpringBoot脚手架的依赖配置

两种方式实现SpringBoot脚手架的依赖配置

时间:2024-04-09 16:46:56浏览次数:26  
标签:依赖 SpringBoot parent spring boot springframework org 脚手架 starter

在基于Spring Boot脚手架创建项目时,通常会直接将spring-boot-starter-parent作为<parent>,如下示例:

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.7.10</version>
    <relativePath /> <!-- lookup parent from repository -->
</parent>

再添加其他相关stater组件依赖时可以不用再明确指定版本号了,非常方便:

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>

但是,当项目中存在多个Maven模块时,通常项目中的<parent>节点是自定义的,并不能直接设置为spring-boot-starter-parent,但是又需要便于使用Spring Boot脚手架,此时该如何处理呢?

实际上,跟踪spring-boot-starter-parent的pom文件配置后发现,它将<parent>设置为了spring-boot-dependencies

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-dependencies</artifactId>
    <version>2.7.10</version>
</parent>

真正的组件依赖是在spring-boot-dependencies中使用<dependencyManagement>进行管理的。

参考Spring Boot自身的组件依赖管理办法,针对在日常开发中既要便于使用Spring Boot脚手架,又不能直接将项目<parent>设置为spring-boot-starter-parent的场景,有2种解决办法:

方式一:将父项目的<parent>设置为spring-boot-starter-parent,然后在子项目中添加starter组件的依赖。

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.7.10</version>
    <relativePath /> <!-- lookup parent from repository -->
</parent>
<packaging>pom</packaging>
<modules>
    <module>xxx</module>
</modules>

方式二:在父项目中使用<dependencyManagement>管理spring-boot-dependencies依赖,这种方式就使用不到spring-boot-starter-parent中的一些基础配置了。

当父项目不设置<parent>时,可以通过<dependencyManagement>管理spring-boot-dependencies依赖,然后在子项目中添加starter组件的依赖。

<packaging>pom</packaging>
<modules>
    <module>xxx</module>
</modules>
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>2.7.10</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

上述2种方式的区别在于:使用第一种方式可以直接使用Spring Boot脚手架的全部基础配置,更加便捷。

例如:使用第一种方式在子项目中使用spring-boot-maven-plugin插件打包时只需要添加依赖即可,无需其他任何配置就可以将项目打包为可执行jar包。

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

在使用第二种方式时使用spring-boot-maven-plugin插件打包为可执行jar包还需要额外的配置,并且必须明确指定插件版本号。

 <build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <!-- 明确指定插件版本号,不指定会报错 -->
            <version>2.7.10</version>
            <executions>
                <execution>
                    <id>repackage</id>
                    <goals>
                        <goal>repackage</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <!-- 明确指定启动类 -->
                <mainClass>org.test.springboot.implementation.App</mainClass>
            </configuration>
        </plugin>
    </plugins>
</build>

当然,使用Spring Boot框架也可以不使用其任何基础配置,直接在依赖管理中明确指定各种starter组件的版本即可。

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
        <version>2.7.10</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <version>2.7.10</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <version>2.7.10</version>
        <scope>test</scope>
    </dependency>
</dependencies>

但是这显然是一件吃累不讨好的事情,不是万不得已不要使用这种方式!

【参考】
你真的理解 Spring Boot 项目中的 parent 吗?
不使用 parent 方式创建SpringBoot项目篇
spring boot 项目不使用 spring-boot-starter-parent 构建,使用自己项目的parent构造

标签:依赖,SpringBoot,parent,spring,boot,springframework,org,脚手架,starter
From: https://www.cnblogs.com/nuccch/p/18124283

相关文章

  • Spring深度学习:循环依赖及源码解析
    文章目录Spring深度学习:循环依赖及源码解析一、序言二、问题原因三、解决方案1.普通Bean对象循环依赖解决2.AOP代理场景下循环依赖解决3.AOP代理场景下多依赖解决四、源码分析:流程①:实例化对象A后,将对象A的工厂对象放入三级缓存流程②:对象A依赖对象B,在缓存中查找对象B流......
  • Springboot 添加License 以及生成证书和证书验证
    1.先准备生成cer证书及私钥,公钥##(1).生成私匙库#validity:私钥的有效期多少天 365 #alias:私钥别称 privateKey#keystore:指定私钥库文件的名称(生成在当前目录) privateKeys.keystore#storepass:指定私钥库的密码(获取keystore信息所需的密码) public_password#key......
  • Springboot计算机毕业设计海滨学院校园墙小程序【附源码】开题+论文+mysql+程序+部署
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容计算机毕业设计海滨学院校园墙小程序研究背景、意义、目的研究背景随着移动互联网技术的快速发展,微信小程序以其便捷性、即用即走的特点,迅速渗透到人们的日......
  • Springboot计算机毕业设计购物商城微信小程序【附源码】开题+论文+mysql+程序+部署
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容计算机毕业设计购物商城微信小程序的研究背景、意义、目的研究背景随着互联网技术的迅猛发展,移动智能终端的普及率不断攀升,微信小程序以其便捷性、轻量级的......
  • .net core的依赖注入学习
    依赖注入(DependencyInjection,DI),简称DI,它可以降低各模块之间的耦合首先需要安装两个Nuget包:Microsoft.Extensions.DependencyInjectionMicrosoft.Extensions.DependencyInjection.Abstractions安装完之后要在主程序里面引用第一个包usingMicrosoft.Extensions.DependencyIn......
  • 基于SpringBoot+Vue大学生租房平台的设计与实现
    基于SpringBoot+Vue大学生租房平台的设计与实现系统介绍基于SpringBoot+Vue大学生租房平台使用Java语言进行编码,使用Mysql创建数据表保存本系统产生的数据。系统可以提供信息显示和相应服务,其管理员管理房东和用户,对房东提交的信息审批信息进行审核,审核房东发布的房源信......
  • SpringBoot中pom.xml配置详解 第一章
    pom.xml是Maven项目的核心配置文件,负责管理项目的依赖、插件、构建配置等。对于SpringBoot项目而言,pom.xml文件显得尤为重要。其中,你可以配置项目的资源文件以及其他相关内容。在SpringBoot的pom.xml文件中,通常会包含一个<resources>标签,该标签用于指定资源文件的路径和......
  • 【SpringBoot整合系列】SpringBoot 实现大文件分片上传、断点续传及秒传
    目录功能介绍文件上传分片上传秒传断点续传相关概念相关方法大文件上传流程前端切片处理逻辑后端处理切片的逻辑流程解析后端代码实现功能目标1.建表SQL2.引入依赖3.实体类4.响应模板5.枚举类6.自定义异常7.工具类8.Controller层9.FileService10.LocalStorageService11......
  • Springboot计算机毕业设计高校课堂管理小程序【附源码】开题+论文+mysql+程序+部署
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着信息技术的迅猛发展,高校课堂管理逐渐从传统的人工管理模式向数字化、智能化转变。当前,高校课堂管理面临着诸多挑战,如学生信息管理繁琐、选课排课......
  • Springboot计算机毕业设计高校兼职小程序【附源码】开题+论文+mysql+程序+部署
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着高校教育的普及和就业市场的日益竞争,越来越多的大学生开始寻求在校期间的兼职机会,以丰富自身经验、锻炼实践能力,并获取一定的经济回报。然而,传统......