<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.5.RELEASE</version>
<relativePath/>
</parent>
idea > new project > spring initializr 建立一個 Spring Boot 項目時:html
或者是乾脆從 https://start.spring.io/ 在線生成 Spring Boot 項目:java
咱們都會發現 spring-boot-starter-parent 的身影,那麼他究竟是幹啥的呢?mysql
這是 Spring Boot 的父級依賴,這樣當前的項目就是 Spring Boot 項目了。spring-boot-starter-parent 是一個特殊的 starter,它用來提供相關的 Maven 默認依賴。web
使用它以後,經常使用的包依賴能夠省去 version 標籤,當咱們搭建web應用的時候,能夠像下面這樣添加spring-boot-starter-web依賴:spring
<!-- Quartz定時任務 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-quartz</artifactId>
</dependency>
注意,關於 parent 提供的一些特性都是依據 maven 環境的,能夠說
spring-boot-starter-parent 是 maven 獨有的,以下是提供的一些特性:sql
1. 默認使用Java8,可添加如下配置修改版本:數據庫
<properties>
<java.version>1.8</java.version>
</properties>
2. 默認使用UTF-8編碼,可添加如下配置修改編碼:apache
<properties>
<project.build.sourceEncoding>GBK</project.build.sourceEncoding>
</properties>
3. 省略version信息api
在 dependencies 裏的部分配置能夠不用填寫 version 信息,這些 version 信息會從 spring-boot-dependencies 裏獲得繼承。tomcat
正常來講項目應該添加了如下帶版本的依賴:
<!-- JPA -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
<version>2.1.8</version>
</dependency>
使用 spring-boot-starter-parent 的話,能夠這樣,繼承默認版本:
<!-- JPA -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
4. 識別過來資源過濾
例如,打包的時候把 src/main/resources 下全部文件都打包到包中。
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.*</include>
</includes>
<filtering>true</filtering>
</resource>
5. 識別插件的配置
好比 exec plugin, surefire, Git commit ID, shade
可以識別 application.properties 和 application.yml 類型的文件,同時也能支持 profile-specific 類型的文件(如: application-foo.properties and application-foo.yml,這個功能能夠更好的配置不一樣生產環境下的配置文件)。
使用 spring-boot-starter-parent 來幫咱們管理 version 確實方便了很多,可是每每咱們須要本身去配置某些版本,怎麼辦呢?
咱們能夠經過覆蓋 properties 標籤的 property 標籤來達到修改依賴版本號的目的,例如上方的修改默認的編碼方式、以及默認jdk版本:
<properties>
<java.version>1.8</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
爲何這樣能夠實現?
咱們瞭解 Spring Boot Dependencies 定義了全部 Spring Boot 項目的默認依賴關係管理。若是咱們想要使用特定依賴項的新版本,咱們能夠經過在項目 pom 中指定新屬性來覆蓋該版本。
下面的摘錄顯示了由 Spring Boot Dependencies 父 pom 管理的一些重要依賴項。因爲 Spring Boot Starter Parent 繼承自 spring-boot-dependencies,所以它也共享全部這些特性。
<properties>
<activemq.version>5.13.4</activemq.version>
...
<ehcache.version>2.10.2.2.21</ehcache.version>
<ehcache3.version>3.1.1</ehcache3.version>
...
<h2.version>1.4.192</h2.version>
<hamcrest.version>1.3</hamcrest.version>
<hazelcast.version>3.6.4</hazelcast.version>
<hibernate.version>5.0.9.Final</hibernate.version>
<hibernate-validator.version>5.2.4.Final</hibernate-validator.version>
<hikaricp.version>2.4.7</hikaricp.version>
<hikaricp-java6.version>2.3.13</hikaricp-java6.version>
<hornetq.version>2.4.7.Final</hornetq.version>
<hsqldb.version>2.3.3</hsqldb.version>
<htmlunit.version>2.21</htmlunit.version>
<httpasyncclient.version>4.1.2</httpasyncclient.version>
<httpclient.version>4.5.2</httpclient.version>
<httpcore.version>4.4.5</httpcore.version>
<infinispan.version>8.2.2.Final</infinispan.version>
<jackson.version>2.8.1</jackson.version>
....
<jersey.version>2.23.1</jersey.version>
<jest.version>2.0.3</jest.version>
<jetty.version>9.3.11.v20160721</jetty.version>
<jetty-jsp.version>2.2.0.v201112011158</jetty-jsp.version>
<spring-security.version>4.1.1.RELEASE</spring-security.version>
<tomcat.version>8.5.4</tomcat.version>
<undertow.version>1.3.23.Final</undertow.version>
<velocity.version>1.7</velocity.version>
<velocity-tools.version>2.0</velocity-tools.version>
<webjars-hal-browser.version>9f96c74</webjars-hal-browser.version>
<webjars-locator.version>0.32</webjars-locator.version>
<wsdl4j.version>1.6.3</wsdl4j.version>
<xml-apis.version>1.4.01</xml-apis.version>
</properties>
因此,咱們更改了 property 後,也實現了咱們的需求,固然咱們還有直接註明 version 的方式呢,以下:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>club.sscai.tmax</groupId>
<artifactId>tmax</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>tmax</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.5.RELEASE</version>
<relativePath/>
</parent>
<properties>
<java.version>1.8</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 數據庫鏈接池 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.10</version>
</dependency>
<!-- Mysql Connector -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
<!-- JPA -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<!-- Lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.4</version>
</dependency>
<!-- Swagger API文檔 -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.7.0</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.7.0</version>
</dependency>
<!-- 熱更新 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>