English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

SpringBoot Starter Parent

spring-boot-starter-Parent is the project starter. It provides default configuration for our application. All dependencies use it internally. All Spring Boot projects will use spring in the pom.xml file.-boot-starter-parent is used as the parent item.

<parent>
<groupId>org.springframework.boot</<groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.4.0.RELEASE</version>
</parent>

Parent Poms allow us to manage the following for multiple sub-projects and modules:

Configuration: It allows us to maintain consistency of Java versions and other related properties. Dependency Management: It controls the version of dependencies to avoid conflicts. Source encoding Default Java version Resource Filtering It also controls the default plugin configuration.

spring-boot-starter-parent from spring-boot-dependencies inherit dependency management. We only need to specify the Spring Boot version number. If additional starters are needed, we can safely omit the version number.

Spring Boot Starter Parent internally

Spring Boot Starter Parent defines spring-boot. -The dependency relationship is as the parent pom. It comes from spring-boot-dependencies inherited dependency management.

<parent>
<groupId>org.springframework.boot</<groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>1.6.0.RELEASE</version>
<relativePath>../../spring-boot-dependencies</relativePath>
</parent>

Default Parent Pom

<properties>
<java.version>1.8</java.version>
<resource.delimiter>@</resource.delimiter> 
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<maven.compiler.source>${java.version}<//maven.compiler.source>
<maven.compiler.target>${java.version}<//maven.compiler.target>
</properties>

The property section defines the default values of the application. The default version of Java is1.8  1.8To cover Java versions. The parent pom also includes some settings related to coding and sources. If not defined in the application.properties file, the Spring Boot framework will use these default values.

plugin management

spring -boot-starter-parent specified many default configurations for plugins, including maven-failsafe-plugin, maven-jar-plugin and maven-surefire-plugin.

<plugin>
<groupId>org.apache.maven.plugins</<groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</<groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>${start-class}</mainClass>  <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
</manifest>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</<groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<includes>
<include>**/*Tests.java</include>
<include>**/*Test.java</include>
</includes>
<excludes>
<exclude>**/Abstract*.java</exclude>
</excludes>
</configuration>
</plugin>

Spring Boot dependencies

spring-boot-starter-parent dependency from spring-The dependencies inherited from boot parent have all these features. Therefore, Spring Boot manages the list of dependencies as part of dependency management.

<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>
<prerequisites>
<maven>3.2.1</maven>
</prerequisites>

Spring Boot Starter without parent

In some cases, we do not need to inherit spring from pom.xml file.-boot-starter-parent. To handle such cases, Spring Boot provides flexibility to not inherit spring-boot-starter-Even in the case of parent, dependency management is still used.

<dependencyManagement>
<dependencies>
<dependency>
<!-- Import dependency management from Spring Boot -->
<groupId>org.springframework.boot</<groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.1.1.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>

In the above code, we can see that we used <scope>Tags. It is very useful when we want to use different versions for specific dependencies.