13.2、Maven

Maven 用户可以继承 spring-boot-starter-parent 项目以获取合适的默认值,父项目提供了以下功能:

  • Java 1.8 作为默认编译器级别。
  • 源代码使用 UTF-8 编码。
  • 依赖管理部分继承自 spring-boot-dependencies 的 POM,允许您省略常见依赖的 <version> 标签。
  • 合理的资源过滤
  • 合适的插件配置(exec pluginGit commit IDshade)。
  • 针对 application.propertiesapplication.yml 资源的合理过滤,包括特定 profile 的文件(例如 application-foo.propertiesapplication-foo.yml

注意:由于 application.propertiesapplication.yml 文件接受 Spring 风格的占位符(${​...}),因此 Maven 过滤改为使用 @..@ 占位符(您可以使用 Maven 的 resource.delimiter 属性重写它)

13.2.1、继承 Starter Parent

要将项目配置继承 spring-boot-starter-parent,只需要按以下方式设置 parent

  1. <!-- 从 Spring Boot 继承默认配置 -->
  2. <parent>
  3. <groupId>org.springframework.boot</groupId>
  4. <artifactId>spring-boot-starter-parent</artifactId>
  5. <version>2.0.0.RELEASE</version>
  6. </parent>

注意

您只需要在此依赖上指定 Spring Boot 的版本号。如果您要导入其它 starter,则可以放心地省略版本号。

通过该设置,您还可以重写自己项目中的配置属性来覆盖个别依赖。例如,要升级到另一个 Spring Data 发行版本,您需要将以下内容添加到 pom.xml 文件中。

  1. <properties>
  2. <spring-data-releasetrain.version>Fowler-SR2</spring-data-releasetrain.version>
  3. </properties>

提示

查看 spring-boot-dependencies pom 以获取受支持的属性清单。

13.2.2、不使用父 POM

不是每个人都喜欢从 spring-boot-starter-parent 继承 POM。您可能需要使用自己公司标准的父 POM,或者您可能只是希望明确地声明所有 Maven 配置。

如果您不想使用 spring-boot-starter-parent,则仍然可以通过使用 scope=import 依赖来获得依赖管理(但不是插件管理)的好处:

<dependencyManagement>
    <dependencies>
        <dependency>
            <!-- 从 Spring Boot 导入依赖管理 -->
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>2.0.0.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

如上所述,上述示例设置不会让您使用属性来覆盖个别依赖。要达到相同的目的,需要在 spring-boot-dependencies之前在项目的 dependencyManagement 中添加一项。例如,要升级到另一个 Spring Data 发行版,您可以将以下元素添加到 pom.xml中:

<dependencyManagement>
    <dependencies>
        <!-- 覆盖 Spring Boot 提供的 Spring Data -->
        <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.0.0.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

注意

以上示例中,我们指定了一个 BOM,但是任何的依赖类型都可以用这个方法来重写。

13.2.3、使用 Spring Boot Maven 插件

Spring Boot 包括了一个 Maven 插件,它可以将项目打包成一个可执行 jar。如果要使用它,请将插件添加到您的 <plugins> 中:

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

注意

如果您使用了 Spring Boot starter 的父 pom,则只需要添加插件。除非您要修改父级中定义的设置,否则不需要进行配置。