上一章SpringBoot简介与HelloWorld我们通过简单的HelloWorld工程运行起来了第一个SpringBoot项目,并且做了一些简单的介绍。这次我们详细说一下项目的父工程spring-boot-starter-parent
,详细见下面的代码
<parent>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-parentartifactId>
<version>2.2.2.RELEASEversion>
parent>
1、spring-boot-starter-parent的「parent」节点
<parent>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-dependenciesartifactId>
<version>2.2.2.RELEASEversion>
<relativePath>../../spring-boot-dependenciesrelativePath>
parent>
spring-boot-dependencies
这个组件又是什么作用呢?
1.1、 spring-boot-dependencies的properties节点
我们看定义POM,这个才是SpringBoot项目的真正管理依赖的项目,里面定义了SpringBoot相关的版本
<properties>
<activemq.version>5.15.11activemq.version>
<antlr2.version>2.7.7antlr2.version>
<appengine-sdk.version>1.9.77appengine-sdk.version>
<artemis.version>2.10.1artemis.version>
<aspectj.version>1.9.5aspectj.version>
<assertj.version>3.13.2assertj.version>
<atomikos.version>4.0.6atomikos.version>
<awaitility.version>4.0.1awaitility.version>
<bitronix.version>2.1.4bitronix.version>
<build-helper-maven-plugin.version>3.0.0build-helper-maven-plugin.version>
<byte-buddy.version>1.10.4byte-buddy.version>
<caffeine.version>2.8.0caffeine.version>
<cassandra-driver.version>3.7.2cassandra-driver.version>
<classmate.version>1.5.1classmate.version>
<commons-codec.version>1.13commons-codec.version>
<commons-dbcp2.version>2.7.0commons-dbcp2.version>
<commons-lang3.version>3.9commons-lang3.version>
<commons-pool.version>1.6commons-pool.version>
<commons-pool2.version>2.7.0commons-pool2.version>
<couchbase-cache-client.version>2.1.0couchbase-cache-client.version>
<couchbase-client.version>2.7.11couchbase-client.version>
<db2-jdbc.version>11.5.0.0db2-jdbc.version>
<dependency-management-plugin.version>1.0.8.RELEASEdependency-management-plugin.version>
等等。。。。。。
properties>
1.2、spring-boot-dependencies的dependencyManagement节点
在这里,dependencies定义了SpringBoot版本的依赖的组件以及相应版本。
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-bootartifactId>
<version>2.2.2.RELEASEversion>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-testartifactId>
<version>2.2.2.RELEASEversion>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-test-autoconfigureartifactId>
<version>2.2.2.RELEASEversion>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-actuatorartifactId>
<version>2.2.2.RELEASEversion>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-actuator-autoconfigureartifactId>
<version>2.2.2.RELEASEversion>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-autoconfigureartifactId>
<version>2.2.2.RELEASEversion>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-autoconfigure-processorartifactId>
<version>2.2.2.RELEASEversion>
dependency>
等等。。。。。。
dependencies>
dependencyManagement>
spring-boot-starter-parent
通过继承spring-boot-dependencies
从而实现了SpringBoot的版本依赖管理。
2、spring-boot-starter-parent的「properties」节点
接下来我们回过头,继续看spring-boot-starter-parent
的properties
节点,在这里spring-boot-starter-parent
定义了
工程的
UTF-8
编码。工程的Java版本为
1.8
。Maven打包编译的版本
工程代码的编译源文件编码格式为
UTF-8
工程编译后的文件编码格式为
UTF-8
<properties>
<project.reporting.outputEncoding>UTF-8project.reporting.outputEncoding>
<java.version>1.8java.version>
<resource.delimiter>@resource.delimiter>
<maven.compiler.source>${java.version}maven.compiler.source>
<project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
<maven.compiler.target>${java.version}maven.compiler.target>
properties>
3、spring-boot-starter-parent的「build」节点
接下来看POM的build
节点,分别定义了resources
资源和pluginManagement
<resources>
<resource>
<filtering>truefiltering>
<directory>${basedir}/src/main/resourcesdirectory>
<includes>
<include>**/application*.ymlinclude>
<include>**/application*.yamlinclude>
<include>**/application*.propertiesinclude>
includes>
resource>
<resource>
<directory>${basedir}/src/main/resourcesdirectory>
<excludes>
<exclude>**/application*.ymlexclude>
<exclude>**/application*.yamlexclude>
<exclude>**/application*.propertiesexclude>
excludes>
resource>
resources>
我们详细看一下resources
节点,里面定义了资源过滤,针对application
的yml
、properties
格式进行了过滤,可以支持支持不同环境的配置,比如application-dev.yml
、application-test.yml
、application-dev.properties
、application-dev.properties
等等。
pluginManagement
则是引入了相应的插件和对应的版本依赖,留下一个小作业,您可以自己打开对应的POM文件,看一下里面究竟有哪些插件。
4、不使用spring-boot-starter-parent启用SpringBoot项目
到此为止,我们看了spring-boot-starter-parent
。现在有一个问题,如果我们不通过parent
的方式引入SpringBoot,因为有时候公司的架构以及有了对应的其他parent,我们怎么引入SpringBoot呢。可以通过dependencyManagement
的方式引入spring-boot-dependencies
,引入方式见下面:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-dependenciesartifactId>
<version>2.2.2.RELEASEversion>
<type>pomtype>
<scope>importscope>
dependency>
dependencies>
dependencyManagement>
这样我们的包的依赖问题就解决了,但是还有一些细节需要处理了,就是parent
项目中的properties
和build
节点的内容,需要大家结合项目进行补充和定义。这样就解决了在旧项目中引入SpringBoot·的问题
总结
好了,一篇文章给大家简单展示了SpringBoot项目的spring-boot-starter-parent
的分析,有问题欢迎留言讨论。