引入 springboot maven 插件

使用 springboot maven 插件的方式比较简单。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<!-- ... -->
	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>
</project>

如果使用里程碑或快照版本,则还需要添加适当的pluginRepository元素,如以下清单所示:

<pluginRepositories>
	<pluginRepository>
		<id>spring-snapshots</id>
		<url>https://repo.spring.io/snapshot</url>
	</pluginRepository>
	<pluginRepository>
		<id>spring-milestones</id>
		<url>https://repo.spring.io/milestone</url>
	</pluginRepository>
</pluginRepositories>

依赖包管理的 2 种方式

springboot里会引入很多springboot starter依赖,这些依赖的版本号统一管理,springboot有几种方案可以选择。

继承 parent

在pom.xml里添加

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-dependencies</artifactId>
    <version>1.5.4.RELEASE</version>
</parent>

导入时,不用指定版本号:

<dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter</artifactId>
</dependency>

使用该设置,您还可以通过覆盖自己项目中的属性来覆盖各个依赖项。

例如,要使用不同版本的SLF4J库和Spring Data发布系列,可以将以下内容添加到pom.xml中:

<properties>
	<slf4j.version>1.7.30</slf4j.version>
	<spring-data-releasetrain.version>Moore-SR6</spring-data-releasetrain.version>
</properties>

import 导入方式

有时候 parent 继承的方式不是很方便使用,因为 maven 只允许继承一个父类。

<dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-dependencies</artifactId>
        <version>1.5.4.RELEASE</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
    </dependencies>
</dependencyManagement>

导入时,不用指定版本号:

<dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter</artifactId>
</dependency>

如上所述,前面的示例设置不允许您使用属性覆盖各个依赖项。

为了获得相同的结果,您需要在spring-boot-dependencies条目之前的项目的dependencyManagement部分中添加条目。

例如,要使用不同版本的SLF4J库和Spring Data发布系列,可以将以下元素添加到pom.xml中:

<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.1</version>
			<type>pom</type>
			<scope>import</scope>
		</dependency>
	</dependencies>
</dependencyManagement>

在命令行上覆盖设置

从spring-boot开始,该插件提供了许多用户属性,可让您从命令行自定义配置。

例如,您可以调整配置文件以在运行应用程序时启用,如下所示:

$ mvn spring-boot:run -Dspring-boot.run.profiles=dev,local

如果在允许它们在命令行上被覆盖时都希望有一个默认值,则应结合使用用户提供的项目属性和MOJO配置。

<project>
    <properties>
        <app.profiles>local,dev</app.profiles>
    </properties>
	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
				<configuration>
					<profiles>${app.profiles}</profiles>
				</configuration>
			</plugin>
		</plugins>
	</build>
</project>

以上内容确保默认情况下启用了 local 和 dev。

现在公开了一个专用属性,也可以在命令行中覆盖它:

$ mvn spring-boot:run -Dapp.profiles=test

打包可执行档案

该插件可以创建包含应用程序所有依赖项的可执行归档文件(jar文件和war文件),然后可以使用java -jar运行。

打包可执行归档文件是由重新打包目标执行的,如以下示例所示:

<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,则已经使用重新打包执行ID预配置了此类执行,因此仅应添加插件定义。

使用 maven 运行 springboot 项目

该插件包括一个运行目标,可用于从命令行启动您的应用程序,如以下示例所示:

$ mvn spring-boot:run

热部署

Spring Boot devtools是一个模块,用于改善在使用Spring Boot应用程序时的开发时间体验。

要启用它,只需将以下依赖项添加到您的项目中:

<dependencies>
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-devtools</artifactId>
		<optional>true</optional>
	</dependency>
</dependencies>

当devtools运行时,它会在重新编译应用程序时检测到更改并自动刷新它。

这不仅适用于资源,而且适用于代码。

它还提供了LiveReload服务器,以便它可以在发生任何变化时自动触发浏览器刷新。

还可以将Devtools配置为仅在静态资源发生更改时刷新浏览器(并忽略代码中的任何更改)。

只需在项目中包括以下属性:

spring.devtools.remote.restart.enabled=false

在devtools之前,该插件默认情况下支持资源的热刷新,现在已禁用它,以支持上述解决方案。

您可以随时通过配置项目来还原它:

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

启用addResources时,在运行应用程序时,任何 src/main/resources 目录都将添加到应用程序类路径中,并且将删除在 target/classes 中发现的所有重复项。

这样可以热刷新资源,这在开发Web应用程序时非常有用。

例如,您可以处理HTML,CSS或JavaScript文件,并且无需重新编译应用程序即可立即查看更改。

这也是允许您的前端开发人员进行工作而无需下载和安装Java IDE的一种有用方法。

小结

希望本文对你有帮助,如果有其他想法的话,也可以评论区和大家分享哦。

各位极客的点赞收藏转发,是老马持续写作的最大动力!

我是老马,期待与你的下次重逢。

参考资料

https://docs.spring.io/spring-boot/docs/2.4.1/maven-plugin/reference/htmlsingle/#help