spring boot的maven配置依赖详解
作者:帅帅的波 发布时间:2021-09-30 12:37:53
本文介绍了spring boot的maven配置依赖详解,分享给大家,具体如下:
我们通过引用spring-boot-starter-parent,添加spring-boot-starter-web
可以实现web项目的功能,当然不使用spring-boot-start-web,通过自己添加的依赖包也可以实现,但是需要一个个添加,费时费力,而且可能产生版本依赖冲突。我们来看下springboot的依赖配置:
利用pom的继承,一处声明,处处使用。在最顶级的spring-boot-dependencies中,使用dependencyManagement让所有子项目引用一个依赖而不用显式的列出版本号,将结构信息,部署信息,共同的依赖信息放置在统一的位置。dependencyManagement只声明依赖,并不真正引入,因此子项目需要通过dependencies引入相关依赖。
1)spring-boot-dependencies组成:
第三方依赖的版本号
插件的版本号
springboot的依赖包,固定版本的parent依赖固定版本包,如果升级只需修改parent的版本号,即可统一更换依赖。
\
第三方依赖,解决了第三方依赖版本不兼容的冲突,使用第三方依赖更加便捷
插件
2)spring-boot-parent组成:
添加额外的依赖,用户会使用的第三方依赖,但是spring-boot-dependencies中没有依赖
测试相关的依赖
以及其他插件及profile配置
3)spring-boot-starter-parent组成:
父级spring-boot-dependencies无需多说
依赖spring-core
在src/main/resources目录下,仅application.yml和application.properties是资源文件并需要进行过滤;在src/main/resources下除application.yml和application.properties外也是资源文件,但不需要过滤。过滤会将文件中${...}替换为系统属性或者项目属性值。
4)sprint-boot-starter-*
可以通过parent来统一管理,这也就是springboot的四大神器之一的starter所带来的便捷。根据不同的功能,添加不同的starter即可。在springboot源码包中我们可以看到spring-boot-starters中有50多个starter
图中根目录pom.xml为spring-boot-starters,使用maven的聚合模块,其他starter作为聚合模块的子目录存在,目的是一次构建多个项目模块,如下图:
通过models来管理所有的starter,可以一次性构建所有starter:
使用assembly插件,将一组文件、目录、依赖元素组装成一个归档文件,如下图:
使用该插件,executions执行器会执行mvn assembly:assembly,只运行一次,描述文件的路径为src/main/assembly/starter-poms-assembly.xml,我们来看下描述文件:
打包的文件格式为zip,模块文件为**/pom.xml,该插件执行完效果如下:
会在src同级目录下生成target文件夹并在其下生成:
zip文件中所有子starter文件的依赖
在源码根目录中与spring-boot-starters同级的目录中,spring-boot-deployment-tests,spring-boot-integration-tests,spring-boot-samples都使用了pom的聚合模块功能。包括spring-boot-1.5.1.RELEASE整个项目也是使用聚合模块功能。可以使用mvnw对项目进行统一构建。
结:
spring-boot的maven配置大概如上所述,使用到了
a.pom继承:一处声明,处处使用
b.pom聚合:一次构建多个项目模块
c.其他插件,各种配置
能让我们在对spring-boot实现有认识的同时,加深对maven配置的理解。
来源:https://segmentfault.com/a/1190000010757682


猜你喜欢
- Android选择图片的两种方式:第一种:单张选取通过隐式启动activity,跳转到相册选择一张返回结果关键代码如下:发送请求:priva
- 在java程序开发中,ftp用的比较多,经常打交道,比如说向FTP服务器上传文件、下载文件,本文给大家介绍如何利用jakarta commo
- 什么是MybatisMyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software fou
- 一、引言在前面的文章中,我们是使用“锁”的方式实现了线程间的通信,这种通信方式比较笨重。除了锁之外,
- 引言:在Object基类中,有一个方法叫clone,产生一个前期对象的克隆,克隆对象是原对象的拷贝,由于引用类型的存在,有深克隆和浅克隆之分
- 一、为何要使用netty开发由于之前已经用Java中的socket写过一版简单的聊天室,这里就不再对聊天室的具体架构进行细致的介绍了,主要关
- java io操作中通常采用BufferedReader,BufferedInputStream等带缓冲的IO类处理大文件,不过java n
- GB2312是简体中文系统的标准编码 用“区” 跟“位”的概念表示 称之为区位码 区指代大的范围 位相当于偏移量。每个汉字占两个字节高位字节
- 在框架开发过程中,通用代码生成是一项必不可少的功能,c#在这后端模板引擎这方面第三方组件较少,我这里选择的是NVelocity,现在升级到了
- 前言有时候我们会在属性注入的时候添加@Lazy注解实现延迟注入,今天咱们通过阅读源码来分析下原因一、一个简单的小例子代码如下:@Servic
- 相关api见:点击进入/* * Copyright 2014 the original author or authors. * * Lic
- 目录顶级程序顶级程序中的方法顶级程序中的类顶级程序的原理分析当我们用 C# 进行编码的时候,总需要写很多的模板代码,即使是最简单的 cons
- 1.ReadWriteLock介绍为什么我们有了Lock,还要用ReadWriteLock呢。我们对共享资源加锁之后,所有的线程都将会等待。
- Spring Boot从天而降Spring Boot是企业级开发的整体整合解决方案,在现在企业项目开发中使用非常普遍,Spring Boot
- 最近做一个小玩意需要识别验证码,之前从来没有接触过识别验证码这块,这可难倒了我。所以,在网上搜索如何识别验证码,许多前辈写的博文教会了我。怕
- 一、前言点关注不迷路,持续输出Unity干货文章。嗨,大家好,我是新发。之前我写了一篇Unity流体模拟的文章:《Unity流体模拟,支持粒
- 我们在C#编程中常见的信息提示框(MessageBox)是微软NET自带的一个用于弹出警告、错误或者讯息一类的“模式”对话框。此类对话框一旦
- RunnableRunnable接口非常简单,就定义了一个方法run(), 实现Runnable接口的run方法就可以实现多线程// 函数式
- NoHttp是专门做Android网络请求与下载的框架,NoHttp基本使用方法如下本文demo源码下载地址: http://xiazai.
- 示例代码如下:namespace SampleListT{ class Program { &