文章目录

  • 前言
  • 功能
  • 不继承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>
  1. 指定jdk版本为1.8
  2. 指定字符集为UTF-8
  3. 继承了spring-boot-dependencies.2.3.5.RELEASE。
  4. 针对以yml、yaml、properties结尾的文件资源过滤,包括以profile定义的不同环境的文件。
  5. 自动化的插件配置,
    • 资源插件:maven-resources-plugin(处理资源文件到输出目录)
    • 测试插件:maven-failsafe-plugin
    • 打包插件:
      • maven-jar-plugin(打包jar)
      • maven-war-plugin(打包war)
  6. 依赖版本的管理。是由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的理解相关推荐

  1. Spring Boot中parent标签的作用

    在Spring Boot的官方示例中,都是让我们继承一个spring的 spring-boot-starter-parent作为parent标签 <parent><groupId&g ...

  2. 手把手教你定制标准 Spring Boot starter

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 写在前面 我们每次构建一个 Spring 应用程序时,我 ...

  3. 自定义 Spring Boot Starter

    一.引言 什么是Spring Boot Starter呢?我们直接来看看官网是怎么介绍的吧. Starters are a set of convenient dependency descripto ...

  4. 一个项目有两个pom_实现一个Spring Boot Starter超简单,读 Starter 源码也不在话下...

    Spring Boot 对比 Spring MVC 最大的优点就是使用简单,约定大于配置.不会像之前用 Spring MVC 的时候,时不时被 xml 配置文件搞的晕头转向,冷不防还因为 xml 配置 ...

  5. 一个简易上手的短信服务Spring Boot Starter,连傻瓜都会!

    作 者:jackieonway 来 源:jianshu.com/u/36510c75d37c 短信服务在用户注册.登录.找回密码等相关操作中,可以让用户使用更加便捷,越来越多的公司都采用短信验证的方式 ...

  6. 快速开发一个自定义 Spring Boot Starter ,希望你也会

    来源:http://t.cn/Ai9li9fC 众所周知,Spring Boot由众多Starter组成,随着版本的推移Starter家族成员也与日俱增.在传统Maven项目中通常将一些层.组件拆分为 ...

  7. 自定义依赖注解无效_最详细的自定义Spring Boot Starter开发教程

    1.前言 随着Spring的日渐臃肿,为了简化配置.开箱即用.快速集成,Spring Boot 横空出世.目前已经成为 Java 目前最火热的框架了.平常我们用Spring Boot开发web应用.S ...

  8. maven 聚合工程 用spring boot 搭建 spring cloud 微服务 模块式开发项目

    项目的简单介绍: 项目采用maven聚合工程 用spring boot 搭建 spring cloud的微服务 模块式开发 项目的截图: 搭建开始: 能上图 我少打字 1.首先搭建maven的聚合工程 ...

  9. 实现一个 Spring Boot Starter 原来如此简单,读 Starter 源码也不在话下

    我是风筝,公众号「古时的风筝」,一个在程序圈混迹多年,主业 Java,另外 Python.React 也玩儿的 6 的斜杠开发者.现已转行程序员鼓励师 Spring Cloud 系列文章已经完成,可以 ...

  10. Spring boot starter

    1:Spring boot starter及项目中的类似运用 1:Spring boot starter的两种方式 引入pom文件,自动管理jar版本 根据spring.factories配置文件,加 ...

最新文章

  1. 通过网络安装VMware ESX Server 5
  2. spring中的quartz调度问题
  3. 太阳表面是怎样的呢?
  4. Java SE之I/O流:知识框架
  5. WebUploader点击上传文件选择框会延迟几秒才会显示
  6. 面向Linux的10款最佳剪贴板管理器
  7. Xavier上的第一个I2C驱动
  8. 阿里巴巴超越腾讯重新成为中国市值最高上市公司!
  9. 品质LOGO模板素材|想知道平面设计师如何设计徽标的秘密吗?
  10. Linux的三种权限含义,Linux chmod命令及权限含义
  11. python发送邮件有逗号_Python发送邮件
  12. iOS开发之Xcode开发快捷键大全
  13. DTCC技术大会来了
  14. 卡诺模型案例分析_设计师必修课:KANO 模型的讲解与案例分析
  15. Diabetes Care:西湖大学郑钜圣等机器学习揭示影响2型糖尿病的肠道菌群特征
  16. The size of tensor a (4) must match the size of tensor b (2) at non-singleton dimension 1
  17. PDF旋转使用的转换器有哪些
  18. ArcGIS空间数据分析实用工具——方向分布(标准差椭圆)
  19. VMware使用OVFTool导出Esxi 6.7.0版本中的虚拟机
  20. onload extensions api

热门文章

  1. 汇编与C/C++内联嵌入汇编
  2. System.out.println() 输出中文乱码 “你好“变成“浣犲ソ“
  3. Newtonsoft.Json随手记
  4. Python 日期和时间处理方法
  5. flex换行后如何设置行距?
  6. 基于AutoJs实现的薅羊毛App专业版源码大分享
  7. 多导睡眠扫描术PSG
  8. java 使用RabbitMQ示例
  9. 【大数据前置基础】Linux安装、Xshell远程控制、WinSCP文件传输
  10. 计算机里如何找ppt文件,PPT文件在电脑上误删怎么恢复?简单方法,值得尝试