Spring Boot Starter Parent的概述

x33g5p2x  于2022-10-06 转载在 Spring  
字(7.7k)|赞(0)|评价(0)|浏览(343)

在本文中,我们将讨论Spring Boot Starter Parent如何帮助管理依赖性版本、项目使用的Java版本以及插件的默认配置。
在本文中,我们将讨论spring-boot-starter-parent依赖性与maven构建工具的关系。

什么是Spring Boot Starter Parent以及如何使用它?

所有Spring Boot项目通常在pom.xml中使用spring-boot-starter-parent作为父类。

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

spring-boot-starter-parent允许我们为多个子项目和模块管理以下事项。

  • 配置 - Java版本和其他属性
  • 依赖性管理 - 依赖性的版本
  • 默认插件配置
    我们应该只需要在这个依赖关系上指定Spring Boot的版本号。如果你导入了额外的启动器,你可以安全地省略版本号。

父项目特性

Maven用户可以从spring-boot-starter-parent项目继承,以获得合理的默认值。父项目提供以下功能。

  • Java 1.8为默认编译器级别。
  • UTF-8源编码。
  • 继承自spring-boot-dependencies pom的依赖管理部分,管理常见依赖的版本。这个依赖性管理让你在自己的pom中使用时可以省略这些依赖性的标签。
  • 一个执行repackage goal的执行ID为repackage
  • Sensible resource filtering.
  • Sensible plugin configuration (exec plugin, Git commit ID, and shade).
  • 注意,由于application.properties和application.yml文件接受Spring风格的占位符(${...}),Maven的过滤方式改为使用@...@占位符。(您可以通过设置Maven的一个名为resource.delimiter的属性来覆盖它)。

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>2.0.4.RELEASE</version>
        <relativePath>../../spring-boot-dependencies</relativePath>
    </parent>

对于Spring Boot 2+,默认的java版本是1.8。其他一些与编码和源、目标版本有关的设置也在父pom中设置。

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

Spring Boot Starter Parent指定了一系列插件的默认配置,包括maven-failsafe-pluginmaven-jar-pluginmaven-surefire-pluginmaven-war-plugin等。

<plugin>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <configuration>
                        <parameters>true</parameters>
                    </configuration>
                </plugin>
                <plugin>
                    <artifactId>maven-failsafe-plugin</artifactId>
                    <executions>
                        <execution>
                            <goals>
                                <goal>integration-test</goal>
                                <goal>verify</goal>
                            </goals>
                        </execution>
                    </executions>
                    <configuration>
                        <classesDirectory>${project.build.outputDirectory}</classesDirectory>
                    </configuration>
                </plugin>
                <plugin>
                    <artifactId>maven-jar-plugin</artifactId>
                    <configuration>
                        <archive>
                            <manifest>
                                <mainClass>${start-class}</mainClass>
                                <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
                            </manifest>
                        </archive>
                    </configuration>
                </plugin>
                <plugin>
                    <artifactId>maven-war-plugin</artifactId>
                    <configuration>
                        <archive>
                            <manifest>
                                <mainClass>${start-class}</mainClass>
                                <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
                            </manifest>
                        </archive>
                    </configuration>
                </plugin>

还有一些插件,你可以在spring-boot-starter-parent pom.xml上找到它们。

使用Spring Boot而不使用父级POM

不是每个人都喜欢从spring-boot-starter-parent POM中继承。你可能有自己的企业标准父本需要使用,也可能喜欢明确声明你的所有Maven配置。

如果你不想使用spring-boot-starter-parent,你仍然可以通过使用scope=import依赖关系来保持依赖关系管理的好处(但不是插件管理),如下所示。

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

下一步是我们需要在spring-boot-dependencies条目之前,在你项目的dependencyManagement中添加一个条目。例如,如果要升级到另一个Spring Data发布列车,你可以在你的pom.xml中添加以下元素。

<dependencyManagement>
    <dependencies>
        <!-- Override Spring Data release train provided by Spring Boot -->
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-releasetrain</artifactId>
            <version>Fowler-SR2</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>2.1.0.BUILD-SNAPSHOT</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

Spring Boot Starter Parent从spring-boot-dependencies继承了什么?

Spring Boot Dependencies定义了所有Spring Boot项目的默认依赖性管理。如果我们想使用某个特定依赖的新版本,我们可以通过在项目pom中指定一个新属性来覆盖该版本。下面的列表显示了由Spring Boot Dependencies parent pom管理的一些重要依赖关系。由于Spring Boot Starter Parent继承自spring-boot-dependencies,所以它也共享所有这些特性。

<properties>
 <activemq.version>5.15.4</activemq.version>
 <antlr2.version>2.7.7</antlr2.version>
 <appengine-sdk.version>1.9.64</appengine-sdk.version>
 <artemis.version>2.4.0</artemis.version>
 <aspectj.version>1.8.13</aspectj.version>
 <assertj.version>3.9.1</assertj.version>
 <atomikos.version>4.0.6</atomikos.version>
 <bitronix.version>2.1.4</bitronix.version>
 <build-helper-maven-plugin.version>3.0.0</build-helper-maven-plugin.version>
 <byte-buddy.version>1.7.11</byte-buddy.version>
 <caffeine.version>2.6.2</caffeine.version>
 <cassandra-driver.version>3.4.0</cassandra-driver.version>
 <classmate.version>1.3.4</classmate.version>
 <commons-codec.version>1.11</commons-codec.version>
 <commons-dbcp2.version>2.2.0</commons-dbcp2.version>
 <commons-lang3.version>3.7</commons-lang3.version>
 <commons-pool.version>1.6</commons-pool.version>
 <commons-pool2.version>2.5.0</commons-pool2.version>
 <couchbase-cache-client.version>2.1.0</couchbase-cache-client.version>
 <couchbase-client.version>2.5.9</couchbase-client.version>
 <derby.version>10.14.1.0</derby.version>
 <dom4j.version>1.6.1</dom4j.version>
 <dropwizard-metrics.version>3.2.6</dropwizard-metrics.version>
 <ehcache.version>2.10.5</ehcache.version>
 <ehcache3.version>3.5.2</ehcache3.version>
 <elasticsearch.version>5.6.10</elasticsearch.version>
 <embedded-mongo.version>2.0.3</embedded-mongo.version>
 <exec-maven-plugin.version>1.5.0</exec-maven-plugin.version>
 <flatten-maven-plugin.version>1.0.1</flatten-maven-plugin.version>
 <flyway.version>5.0.7</flyway.version>
 <freemarker.version>2.3.28</freemarker.version>
 <git-commit-id-plugin.version>2.2.4</git-commit-id-plugin.version>
 <glassfish-el.version>3.0.0</glassfish-el.version>
 <groovy.version>2.4.15</groovy.version>
 <gson.version>2.8.5</gson.version>
 <h2.version>1.4.197</h2.version>
 <hamcrest.version>1.3</hamcrest.version>
 <hazelcast.version>3.9.4</hazelcast.version>
 <hazelcast-hibernate5.version>1.2.3</hazelcast-hibernate5.version>
 <hibernate.version>5.2.17.Final</hibernate.version>
 <hibernate-jpa-2.1-api.version>1.0.2.Final</hibernate-jpa-2.1-api.version>
 <hibernate-validator.version>6.0.11.Final</hibernate-validator.version>
 <hikaricp.version>2.7.9</hikaricp.version>
 <hsqldb.version>2.4.1</hsqldb.version>
 .......
</properties>

spring-boot-dependencies pom.xml上查找更多默认设置
在Spring Boot教程中了解Spring Boot的最新版本

相关文章