Spring Boot Starter Parent

Spring Boot Starter Parent(Spring Boot Starter 父项目)是一个项目启动器,为我们的应用程序提供默认配置。它在所有依赖项中内部使用。所有的Spring Boot项目都会在pom.xml文件中将spring-boot-starter-parent作为父项目。

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

父POM允许我们管理多个子项目和模块的以下内容:

  1. 配置:它允许我们维护Java版本和其他相关属性的一致性。
  2. 依赖管理:它控制依赖项的版本,以避免冲突。
  3. 源代码编码
  4. 默认Java版本
  5. 资源过滤
  6. 它还控制默认的插件配置。

spring-boot-starter-parent继承了spring-boot-dependencies的依赖管理。我们只需要指定Spring Boot版本号。如果需要额外的starter,我们可以安全地省略版本号。

Spring Boot Starter Parent 内部

Spring Boot Starter Parent定义了spring-boot-dependencies作为父POM。它继承自spring-boot-dependencies的依赖管理。

<parent>  
    <groupId>org.springframework.boot</groupId>  
    <artifactId>spring-boot-dependencies</artifactId>  
    <version>1.6.0.RELEASE</version>  
    <relativePath>../../spring-boot-dependencies</relativePath>  
</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>  

properties部分定义了应用程序的默认值。默认Java版本是1.8。我们还可以通过在项目的pom中指定属性<java.version>1.8</java.version>来覆盖Java版本。父POM还包含与编码和源代码相关的一些其他设置。如果我们在application.properties文件中未定义这些值,Spring Boot框架将使用这些默认值。

插件管理

spring-boot-starter-parent指定了一系列插件的默认配置,包括maven-failsafe-plugin、maven-jar-plugin和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依赖

spring-boot-starter-parent继承了spring-boot-dependencies,因此它也共享所有这些特性。因此,Spring Boot管理依赖项列表作为依赖管理的一部分。

<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

在某些情况下,我们可以不在pom.xml文件中继承spring-boot-starter-parent。为了处理这种情况,Spring Boot提供了一种灵活的方式,可以在不继承spring-boot-starter-parent的情况下仍然使用依赖管理。

code<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>

在上面的代码中,我们使用了<scope>标签。当我们希望为特定的依赖项使用不同的版本时,这是很有用的。

通过使用上述方式,我们可以在项目中单独指定要使用的Spring Boot版本,同时仍然享受spring-boot-dependencies提供的依赖管理功能。这种方法适用于那些不希望继承整个spring-boot-starter-parent的配置,但仍然希望使用Spring Boot提供的依赖管理功能的情况。

标签: spring, Spring教程, Spring语言学习, Spring框架, Spring框架教程, Spring框架高级教程, spring boot, spring boot入门教程, spring boot学习教程, spring boot下载, spring boot框架入门, spring boot面试题, spring boot笔试题, spring boot学习指南, spring boot技术