上海网站建设q479185700強,电商app开发公司,百度验证网站,网站上关键词的推广怎么做目录 一、前言二、Maven继承三、分析spring-boot-starter-parent四、Maven单继承问题五、不继承spring-boot-starter-parent需要注意的 一、前言
在idea当中创建springboot项目的时候都会继承一个spring-boot-starter-parent作为父类#xff0c;假如不继承我们的项目就不能使… 目录 一、前言二、Maven继承三、分析spring-boot-starter-parent四、Maven单继承问题五、不继承spring-boot-starter-parent需要注意的 一、前言
在idea当中创建springboot项目的时候都会继承一个spring-boot-starter-parent作为父类假如不继承我们的项目就不能使用了吗他的作用是什么呢报着这些疑问我们进行深度解析。 二、Maven继承
Maven 在设计时借鉴了 Java 面向对象中的继承思想提出了 POM 继承思想。当一个项目包含多个模块时可以在该项目中再创建一个父模块并在其 POM 中声明依赖其他模块的 POM 可通过继承父模块的 POM 来获得对相关依赖的声明。对于父模块而言其目的是为了消除子模块 POM 中的重复配置其中不包含有任何实际代码因此父模块 POM 的打包类型packaging必须是 pom。
通过mvn help:effective-pom 命令就可以查看项目的最终生成的pom有效的pom。mvn help:effective-pom命令详解https://blog.csdn.net/weixin_43888891/article/details/130483451
三、分析spring-boot-starter-parent
不继承我们的项目就不能使用了吗 答当然不是我们选择该依赖然后按住ctrl就可以点进去可以看一下他都做了些什么实际上就是给我们提供了一个管理的依赖pom而并没有真实的去引用任何依赖 1了解spring-boot-starter-parent spring-boot-starter-parent下大部门都是pluginManagement插件管理。 pluginManagement 元素与 dependencyManagement 元素的原理十分相似在 pluginManagement 元素中可以声明插件及插件配置但不会发生实际的插件调用行为只有在 POM 中配置了真正的 plugin 元素且其 groupId 和 artifactId 与 pluginManagement 元素中配置的插件匹配时pluginManagement 元素的配置才会影响到实际的插件行为。 2了解spring-boot-dependencies
接下来我们再点进去spring-boot-dependencies看看spring-boot-dependencies给我们提供了大量的dependencyManagement依赖版本管理。
Maven 可以通过 dependencyManagement 元素对依赖进行管理它具有以下 2 大特性
在该元素下声明的依赖不会实际引入到模块中只有在 dependencies 元素下同样声明了该依赖才会引入到模块中。该元素能够约束 dependencies 下依赖的使用即 dependencies 声明的依赖若未指定版本则使用 dependencyManagement 中指定的版本否则将覆盖 dependencyManagement 中的版本。 3不引用spring-boot-starter-parent项目如何正常使用
新建一个空项目只引入web注意没有引入boot版本管理那就需要手动添加版本号springboot照样可以启动的哟 四、Maven单继承问题
现在有个问题我现在想使用spring-boot-starter-parent提供的依赖管理但是我又不想继承他因为我还要继承别的项目这时候该怎么办呢 maven和Java一样都是单继承机制maven当中有typepom/type和scopeimport/scope 通过这两个标签在dependencyManagement中声明依赖可以替代继承达到类似parent标签的作用解决了单继承问题。 官网讲解https://docs.spring.io/spring-boot/docs/3.1.0-SNAPSHOT/maven-plugin/reference/htmlsingle/#using.import dependencyManagementdependenciesdependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-dependencies/artifactIdversion2.7.10/versiontypepom/typescopeimport/scope/dependency/dependencies
/dependencyManagement类似于parentgroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-parent/artifactIdversion2.7.10/versionrelativePath/
/parent只是类似并不完全替代继承。为什么这么说请看如下示例spring-boot-starter-parent的pluginManagement是有对spring-boot-maven-plugin版本进行管理的 找不到说明一个原因导入的配置没有生效 说明使用dependencyManagement来替代parent的时候pluginManagement里面嵌套的plugins版本并没有继承过来。
注import 依赖范围只能与 dependencyManagement 元素配合使用才会有效其功能是将目标 pom.xml 中的 dependencyManagement 配置导入合并到当前 pom.xml 的 dependencyManagement 中。 因此便可以明白解决单继承的时候为什么官网让我们导入spring-boot-dependencies而不是spring-boot-starter-parent因为spring-boot-starter-parent当中继承了spring-boot-dependencies但是parent实际上就是提供了一些pluginManagement而使用import 导入的形式根本无法将这些导入。 五、不继承spring-boot-starter-parent需要注意的
假如不继承spring-boot-starter-parent我们还需要自己声明打包插件。spring-boot-starter-parent配置的插件就是打出来一个可直接运行的jar。 假如我们只声明如下打出来的jar包是启动不起来的打出来的jar包并不会将依赖的jar打进去。
buildpluginsplugingroupIdorg.springframework.boot/groupIdartifactIdspring-boot-maven-plugin/artifactIdversion2.7.10/version/plugin/plugins
/build