对于maven的parent继承spring-boot-starter-parent的理解
文章目录
- 前言
- 功能
- 不继承spring-boot-parent
- 基础配置
- 版本依赖
- 插件配置
- 直接继承spring-boot-dependencies
- 总结
前言
在很多的springboot项目中,我们都能看到pom中,有类似这样的一段代码:
<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.3.5.RELEASE</version>
</parent>
因为我这里用的版本是2.3.5.RELEASE,可能会存在一定的出入。
那么这一段有什么作用呢?让我们通过查看对应版本的pom文件内容,分析一下看看。
功能
这里因为篇幅原因,我只截取关键的代码。
<!-- spring-boot-starter-parent-2.3.5.RELEASE.pom --><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>2.3.5.RELEASE</version></parent><properties><java.version>1.8</java.version><resource.delimiter>@</resource.delimiter><maven.compiler.source>${java.version}</maven.compiler.source><maven.compiler.target>${java.version}</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
</properties><resources><resource><directory>${basedir}/src/main/resources</directory><filtering>true</filtering><includes><include>**/application*.yml</include><include>**/application*.yaml</include><include>**/application*.properties</include></includes></resource><resource><directory>${basedir}/src/main/resources</directory><excludes><exclude>**/application*.yml</exclude><exclude>**/application*.yaml</exclude><exclude>**/application*.properties</exclude></excludes></resource>
</resources><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><configuration><parameters>true</parameters></configuration>
</plugin>
<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-failsafe-plugin</artifactId><executions><execution><goals><goal>integration-test</goal><goal>verify</goal></goals></execution></executions><configuration><classesDirectory>${project.build.outputDirectory}</classesDirectory></configuration>
</plugin>
<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-jar-plugin</artifactId><configuration><archive><manifest><mainClass>${start-class}</mainClass><addDefaultImplementationEntries>true</addDefaultImplementationEntries></manifest></archive></configuration>
</plugin>
<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-war-plugin</artifactId><configuration><archive><manifest><mainClass>${start-class}</mainClass><addDefaultImplementationEntries>true</addDefaultImplementationEntries></manifest></archive></configuration>
</plugin>
<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-resources-plugin</artifactId><configuration><delimiters><delimiter>${resource.delimiter}</delimiter></delimiters><useDefaultDelimiters>false</useDefaultDelimiters></configuration>
</plugin>
- 指定jdk版本为1.8
- 指定字符集为UTF-8
- 继承了spring-boot-dependencies.2.3.5.RELEASE。
- 针对以yml、yaml、properties结尾的文件资源过滤,包括以profile定义的不同环境的文件。
- 自动化的插件配置,
- 资源插件:maven-resources-plugin(处理资源文件到输出目录)
- 测试插件:maven-failsafe-plugin
- 打包插件:
- maven-jar-plugin(打包jar)
- maven-war-plugin(打包war)
- 依赖版本的管理。是由spring官方测试过后,较为兼容的版本,可以在spring-boot-dependencies.2.3.5.RELEASE中查看到。
spring-boot-dependencies中是通过 dependencyManagement 和 pluginManagement 对版本进行管理的。
对 dependencies 和 dependencyManagement 差别可以看一下这个文章
不继承spring-boot-parent
那么不使用parent会有什么后果呢?显而易见的,就是上面的parent提供的功能都要自己实现
基础配置
<properties><java.version>1.8</java.version><resource.delimiter>@</resource.delimiter><maven.compiler.source>${java.version}</maven.compiler.source><maven.compiler.target>${java.version}</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
</properties>
需要自己手动指定字符集和编译版本。
版本依赖
因为没有地方对依赖版本进行了控制,所以我们所有引入的依赖都需要自己填入版本。
<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><version>2.3.5.RELEASE</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId><version>2.3.5.RELEASE</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId><version>2.3.5.RELEASE</version></dependency>
</dependencies>
这时项目在本地能够正常运行,因为依赖的配置都能获取到,但是无法打包成jar或者war包。
插件配置
<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-jar-plugin</artifactId><configuration><archive><manifest><mainClass>${start-class}</mainClass><addDefaultImplementationEntries>true</addDefaultImplementationEntries></manifest></archive></configuration>
</plugin>
<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-war-plugin</artifactId><configuration><archive><manifest><mainClass>${start-class}</mainClass><addDefaultImplementationEntries>true</addDefaultImplementationEntries></manifest></archive></configuration>
</plugin>
我们就需要自己配置对应的插件和版本,像是打包war包所需要的web.xml文件,指定主类等,都需要手动配置。当然我们也可以借助其它工具来打包。
直接继承spring-boot-dependencies
实际上spring-boot-dependencies主要的功能就是提供了一个对依赖版本的管理。让我们对版本的控制可以简化,因为是由spring官方测试过的稳定兼容版本。然后我们自己还是需要做一个类似 spring-boot-parent 的pom文件,因为这是我们实际依赖的项目插件和配置。
说简单点了,实际就是dependencyManagement和dependencies的关系。
总结
这主要是springboot的主要理念:起步依赖、简化开发。我们只需要简单的通过继承spring-boot-parent,就能快速的解决编译、资源文件输出、配置文件、打包、版本依赖等管理,而不需要繁杂的配置。
对于maven的parent继承spring-boot-starter-parent的理解相关推荐
- Spring Boot中parent标签的作用
在Spring Boot的官方示例中,都是让我们继承一个spring的 spring-boot-starter-parent作为parent标签 <parent><groupId&g ...
- 手把手教你定制标准 Spring Boot starter
点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 写在前面 我们每次构建一个 Spring 应用程序时,我 ...
- 自定义 Spring Boot Starter
一.引言 什么是Spring Boot Starter呢?我们直接来看看官网是怎么介绍的吧. Starters are a set of convenient dependency descripto ...
- 一个项目有两个pom_实现一个Spring Boot Starter超简单,读 Starter 源码也不在话下...
Spring Boot 对比 Spring MVC 最大的优点就是使用简单,约定大于配置.不会像之前用 Spring MVC 的时候,时不时被 xml 配置文件搞的晕头转向,冷不防还因为 xml 配置 ...
- 一个简易上手的短信服务Spring Boot Starter,连傻瓜都会!
作 者:jackieonway 来 源:jianshu.com/u/36510c75d37c 短信服务在用户注册.登录.找回密码等相关操作中,可以让用户使用更加便捷,越来越多的公司都采用短信验证的方式 ...
- 快速开发一个自定义 Spring Boot Starter ,希望你也会
来源:http://t.cn/Ai9li9fC 众所周知,Spring Boot由众多Starter组成,随着版本的推移Starter家族成员也与日俱增.在传统Maven项目中通常将一些层.组件拆分为 ...
- 自定义依赖注解无效_最详细的自定义Spring Boot Starter开发教程
1.前言 随着Spring的日渐臃肿,为了简化配置.开箱即用.快速集成,Spring Boot 横空出世.目前已经成为 Java 目前最火热的框架了.平常我们用Spring Boot开发web应用.S ...
- maven 聚合工程 用spring boot 搭建 spring cloud 微服务 模块式开发项目
项目的简单介绍: 项目采用maven聚合工程 用spring boot 搭建 spring cloud的微服务 模块式开发 项目的截图: 搭建开始: 能上图 我少打字 1.首先搭建maven的聚合工程 ...
- 实现一个 Spring Boot Starter 原来如此简单,读 Starter 源码也不在话下
我是风筝,公众号「古时的风筝」,一个在程序圈混迹多年,主业 Java,另外 Python.React 也玩儿的 6 的斜杠开发者.现已转行程序员鼓励师 Spring Cloud 系列文章已经完成,可以 ...
- Spring boot starter
1:Spring boot starter及项目中的类似运用 1:Spring boot starter的两种方式 引入pom文件,自动管理jar版本 根据spring.factories配置文件,加 ...
最新文章
- 通过网络安装VMware ESX Server 5
- spring中的quartz调度问题
- 太阳表面是怎样的呢?
- Java SE之I/O流:知识框架
- WebUploader点击上传文件选择框会延迟几秒才会显示
- 面向Linux的10款最佳剪贴板管理器
- Xavier上的第一个I2C驱动
- 阿里巴巴超越腾讯重新成为中国市值最高上市公司!
- 品质LOGO模板素材|想知道平面设计师如何设计徽标的秘密吗?
- Linux的三种权限含义,Linux chmod命令及权限含义
- python发送邮件有逗号_Python发送邮件
- iOS开发之Xcode开发快捷键大全
- DTCC技术大会来了
- 卡诺模型案例分析_设计师必修课:KANO 模型的讲解与案例分析
- Diabetes Care:西湖大学郑钜圣等机器学习揭示影响2型糖尿病的肠道菌群特征
- The size of tensor a (4) must match the size of tensor b (2) at non-singleton dimension 1
- PDF旋转使用的转换器有哪些
- ArcGIS空间数据分析实用工具——方向分布(标准差椭圆)
- VMware使用OVFTool导出Esxi 6.7.0版本中的虚拟机
- onload extensions api
热门文章
- 汇编与C/C++内联嵌入汇编
- System.out.println() 输出中文乱码 “你好“变成“浣犲ソ“
- Newtonsoft.Json随手记
- Python 日期和时间处理方法
- flex换行后如何设置行距?
- 基于AutoJs实现的薅羊毛App专业版源码大分享
- 多导睡眠扫描术PSG
- java 使用RabbitMQ示例
- 【大数据前置基础】Linux安装、Xshell远程控制、WinSCP文件传输
- 计算机里如何找ppt文件,PPT文件在电脑上误删怎么恢复?简单方法,值得尝试