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

构建springboot项目的两种方式:(1)是继承spring-boot-starter-parent项目(2)通过dependencyManagement进行依赖管理 [*推荐,常用] (1)是继承spring-boot-starter-parent项目 pom里面指定parent项目,以便继承springboot项目: <parent> <groupId>org.springframework.boot</groupId> <artifac 这过程可能会遇到很多问题,需要一个个百度(问题基本都是pom文件配置不对导致,我修改了一天的配置,一个个解决后才成功构建了jar包),下面记录一下pom.xml配置。结果jar包正常启动未报错,通过项目代码也能成功调用接口,说明一切这个包没问题,可直接使用,后面我是吧jar拿到linux服务器上启动,没问题后再打成docker镜像部署即可。进入到jar包所在文件夹(我这里构建成功后,jar直接发送到了maven仓库,具体地址可以看控制台的日志输出),打开cmd命令窗口,执行下面命令启动,观察是否报错。 我们在实际工作项目中不是每个人都喜欢从spring-boot-starter-parent POM 继承。我们有时候想通过继承的方式来声明所有maven 配置。Spring 为我们提供了具体的解决方案 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org... 网上介绍了许多如何创建Springboot项目,大多数基于IDE开发工具并且用Maven管理,如果在当前的开发环境并不充裕下,我们可以直接使用Maven命令来创建管理SpringBoot项目,对于习惯使用命令来创建项目来说比较的方便、同时更好的理解SpringBoot项目结构 SpringBoot项目必须继承spring-boot-starter-parent,即所有的SpringBoot项目都是spring-boot-starter-parent的子项目SpringBoot项目中可以定义起步依赖,起步依赖不是以jar包为单位,而是以功能为单位 spring-boot-maven-plugin插件是将项目打包成jar包的插件。该插件打包后的SpringBoot项目无需依赖web容器,可以直接使用JDK运行 spring framework就好比一个大型的电子元件生产公司,它生产的元件性能都很优秀,但是坊间使用它的元件的作坊,拿到手之后还得搞一些电焊,衔接,可能要花个10天半个月最后做成一个家电或者机器人(不管啥了,只是例子)。