spring-boot-starter-parent_SpringBoot入門篇(2)springbootstarterparent分析
技術標籤:spring-boot-starter-parent
點選上方 藍字可以訂閱哦上一章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
的分析,有問題歡迎留言討論。