SpringBoot对maven提供了Spring Boot Maven插件,它可以用来将项目打包为可自行的jar或者war包,运行SpringBoot应用程序,生成构建信息和在运行整合测试前启动SpringBoot应用。
一、引入插件
为了使用Spring Boot maven插件,需要在pom.xml文件中添加以下代码引入插件:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
二、父项目为spring-boot-starter-parent时插件的功能
Maven 用户可以使用 spring-boot-starter-parent为父 项目以获得合理的默认配置值。
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.4.10</version>
</parent>
该父项目提供的功能包括:
- java1.8为默认编译级别;
- UTF-8为默认编码;
- 一个继承自spring-boot-dependencies的依赖管理版块,该版块管理了常见依赖项的版本,以便省略这些依赖项的<version> 标记;
- 一个repackage goal和repackage执行id;
- 合理的资源过滤;
- 智能插件配置,例如maven-complier-plugin插件,配置了parameters,可以达到不写@Param,mybatis也能正常读取到参数名称;
- 对application.properties 和 application.yml 的合理资源过滤,包括特定于配置文件的文件
当然,你也可以在项目中对默认的依赖版本进行覆盖,例如:
<properties>
<slf4j.version>1.7.30</slf4j.version>
<spring-data-releasetrain.version>Moore-SR6</spring-data-releasetrain.version>
</properties>
三、使用spring-boot-dependencies引入SpringBoot
如果你不想使用spring-boot-starter-parent,那么你可以通过使用spring-boot-dependencies来引入springboot相关依赖,不同的是该方式只会引入依赖,properties和plugins需要自己重新定义:
<dependencyManagement>
<dependencies>
<dependency>
<!-- Import dependency management from Spring Boot -->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.4.10</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
此种方式下不能仅通过定义<properties>来覆盖默认依赖,需要在其之前完整的声明目标依赖,才能达到覆盖默认依赖的效果,例如:
<dependencyManagement>
<dependencies>
<!-- Override SLF4J provided by Spring Boot -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.30</version>
</dependency>
<!-- Override Spring Data release train provided by Spring Boot -->
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-releasetrain</artifactId>
<version>2020.0.0-SR1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.4.10</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
四、打包为可执行文件
将项目打包为可执行文件由 repackage goal执行,如以下示例所示:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
如果你使用的是 spring-boot-starter-parent,则此类执行已经预先配置了<goal>repackage</goal>,因此只应添加插件定义。而spring-boot-dependencies则必须添加完全。
也可以配置打包时项目的主启动类和打包格式,manifest 中的 Main-Class 由 Spring Boot 插件的 layout 属性控制,如下例所示:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<mainClass>${start.class}</mainClass>
<layout>ZIP</layout>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
layout的默认值根据项目情况默认为JAR或WAR,可取的值还有ZIP和NONE