1. 程式人生 > 其它 >spring-boot-starter-parent_SpringBoot入門篇(2)springbootstarterparent分析

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-parentproperties節點,在這裡spring-boot-starter-parent定義了

  1. 工程的UTF-8編碼。

  2. 工程的Java版本為1.8

  3. Maven打包編譯的版本

  4. 工程程式碼的編譯原始檔編碼格式為UTF-8

  5. 工程編譯後的檔案編碼格式為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節點,裡面定義了資源過濾,針對applicationymlproperties格式進行了過濾,可以支援支援不同環境的配置,比如application-dev.ymlapplication-test.ymlapplication-dev.propertiesapplication-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專案中的propertiesbuild節點的內容,需要大家結合專案進行補充和定義。這樣就解決了在舊專案中引入SpringBoot·的問題

總結

好了,一篇文章給大家簡單展示了SpringBoot專案的spring-boot-starter-parent的分析,有問題歡迎留言討論。

文章推薦 SpringBoot簡介與HelloWorld Java進階必備——網際網路後端全套基礎設施 【收藏必備】JVM 完整深入解析(12000字噢) 69 個經典 Spring 面試題(含答案) 史上最全的Java日誌框架(15000字) 面試時你應該這樣介紹自己的專案經驗?

ab052cec8649bebeb27ac18f97754917.png