13. Build Systems

强烈建议您选择一个支持dependency management并且可以使用发布到“ Maven Central”存储库的工件的构建系统。我们建议您选择 Maven 或 Gradle。可以使 Spring Boot 与其他构建系统(例如,Ant)一起使用,但是它们并没有得到很好的支持。

13.1 依赖性 Management

每个 Spring Boot 版本都提供了它支持的精选依赖列表。实际上,您不需要为构建配置中的所有这些依赖项提供版本,因为 Spring Boot 会为您 Management 版本。当您升级 Spring Boot 本身时,这些依赖项也会以一致的方式升级。

Note

您仍然可以指定版本,并在需要时覆盖 Spring Boot 的建议。

精选列表包含可与 Spring Boot 一起使用的所有 spring 模块以及精炼的第三方库列表。该列表作为标准物料 Lists(Spring 引导相关性)可用,可以与MavenGradle一起使用。

Warning

每个 Spring Boot 版本都与 Spring Framework 的基本版本相关联。我们强烈建议您不要指定其版本。

13.2 Maven

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

请注意,由于application.propertiesapplication.yml文件接受 Spring 样式占位符(${…}),因此 Maven 过滤已更改为使用@[email protected]占位符。 (您可以通过设置名为resource.delimiter的 Maven 属性来覆盖它.)

13.2.1 继承 Starter Parent

要将项目配置为从spring-boot-starter-parent继承,请设置parent,如下所示:

<!-- Inherit defaults from Spring Boot -->
<parent>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-parent</artifactId>
	<version>2.1.1.RELEASE</version>
</parent>

Note

您只需要为此依赖项指定 Spring Boot 版本号。如果导入其他启动器,则可以安全地省略版本号。

使用该设置,您还可以通过覆盖自己项目中的属性来覆盖各个依赖项。例如,要升级到另一个 Spring Data 发布系列,可以将以下内容添加到pom.xml

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

Tip

spring-boot-dependencies pom上查看受支持的属性的列表。

13.2.2 在没有父 POM 的情况下使用 Spring Boot

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

如果您不想使用spring-boot-starter-parent,仍然可以通过使用scope=import依赖项来保留依赖项 Management(而不是插件 Management)的好处,如下所示:

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

如上所述,前面的示例设置不允许您使用属性来覆盖各个依赖项。为了获得相同的结果,您需要在项目的dependencyManagement 之前spring-boot-dependencies条目之前添加一个条目。例如,要升级到另一个 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.1.RELEASE</version>
			<type>pom</type>
			<scope>import</scope>
		</dependency>
	</dependencies>
</dependencyManagement>

Note

在前面的示例中,我们指定了* BOM *,但是可以以相同方式覆盖任何依赖项类型。

13.2.3 使用 Spring Boot Maven 插件

Spring Boot 包含一个Maven plugin,可以将项目打包为可执行 jar。如果要使用插件,请将其添加到<plugins>部分,如以下示例所示:

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

Note

如果您使用 Spring Boot 启动器的父 pom,则只需添加插件。除非您要更改父级中定义的设置,否则无需对其进行配置。

13.3 Gradle

要了解有关将 Spring Boot 与 Gradle 结合使用的信息,请参阅 Spring Boot 的 Gradle 插件的文档:

13.4 Ant

可以使用 Apache Ant Ivy 构建 Spring Boot 项目。 spring-boot-antlib“ AntLib”模块也可用于帮助 Ant 创建可执行 jar。

要声明依赖关系,典型的ivy.xml文件看起来类似于以下示例:

<ivy-module version="2.0">
	<info organisation="org.springframework.boot" module="spring-boot-sample-ant" />
	<configurations>
		<conf name="compile" description="everything needed to compile this module" />
		<conf name="runtime" extends="compile" description="everything needed to run this module" />
	</configurations>
	<dependencies>
		<dependency org="org.springframework.boot" name="spring-boot-starter"
			rev="${spring-boot.version}" conf="compile" />
	</dependencies>
</ivy-module>

典型的build.xml类似于以下示例:

<project
	xmlns:ivy="antlib:org.apache.ivy.ant"
	xmlns:spring-boot="antlib:org.springframework.boot.ant"
	name="myapp" default="build">

	<property name="spring-boot.version" value="2.1.1.RELEASE" />

	<target name="resolve" description="--> retrieve dependencies with ivy">
		<ivy:retrieve pattern="lib/[conf]/[artifact]-[type]-[revision].[ext]" />
	</target>

	<target name="classpaths" depends="resolve">
		<path id="compile.classpath">
			<fileset dir="lib/compile" includes="*.jar" />
		</path>
	</target>

	<target name="init" depends="classpaths">
		<mkdir dir="build/classes" />
	</target>

	<target name="compile" depends="init" description="compile">
		<javac srcdir="src/main/java" destdir="build/classes" classpathref="compile.classpath" />
	</target>

	<target name="build" depends="compile">
		<spring-boot:exejar destfile="build/myapp.jar" classes="build/classes">
			<spring-boot:lib>
				<fileset dir="lib/runtime" />
			</spring-boot:lib>
		</spring-boot:exejar>
	</target>
</project>

Tip

如果您不想使用spring-boot-antlib模块,请参阅* 第 91.9 节“不使用 spring-boot-antlib 从 Ant 构建可执行存档” *“操作方法”。

13.5 Starters

Starter 程序是一组方便的依赖项 Descriptors,您可以在应用程序中包括它们。您可以一站式购买所需的所有 Spring 和相关技术,而不必遍历示例代码和依赖 Descriptors 的复制粘贴负载。例如,如果要开始使用 Spring 和 JPA 进行数据库访问,请在项目中包括spring-boot-starter-data-jpa依赖项。

Starter 程序包含许多启动项目并快速运行所需的依赖项,并且具有一组受支持的受管传递性依赖项。

What's in a name

所有“官方”Starter 者都遵循类似的命名方式; spring-boot-starter-*,其中*是特定类型的应用程序。这种命名结构旨在在您需要寻找 Starter 者时提供帮助。许多 IDE 中的 Maven 集成使您可以按名称搜索依赖项。例如,在安装了适当的 Eclipse 或 STS 插件的情况下,您可以在 POM 编辑器中按ctrl-space并键入“ spring-boot-starter”以获取完整列表。

如“ 创建自己的 Starter”部分中所述,第三方启动程序不应以spring-boot开头,因为它是为官方 Spring Boot 工件保留的。而是,第三方启动程序通常以项目名称开头。例如,一个名为thirdpartyproject的第三方启动程序项目通常会被命名为thirdpartyproject-spring-boot-starter

Spring Boot 在org.springframework.boot组下提供了以下应用程序启动器:

表 13.1. Spring Boot 应用程序启动器

Name Description Pom
spring-boot-starter 核心 Starter 工具,包括自动配置支持,日志记录和 YAML Pom
spring-boot-starter-activemq 使用 Apache ActiveMQ 的 JMS 消息传递 Starter Pom
spring-boot-starter-amqp 使用 Spring AMQP 和 Rabbit MQ 的 Starter Pom
spring-boot-starter-aop 使用 Spring AOP 和 AspectJ 进行面向方面编程的 Starter Pom
spring-boot-starter-artemis 使用 Apache Artemis 的 JMS 消息传递 Starter Pom
spring-boot-starter-batch 使用 Spring Batch 的 Starter Pom
spring-boot-starter-cache 使用 Spring Framework 的缓存支持的 Starter 者 Pom
spring-boot-starter-cloud-connectors 使用 Spring Cloud Connectors 的 Starter 程序,可简化与 Cloud Foundry 和 Heroku 等云平台中服务的连接 Pom
spring-boot-starter-data-cassandra 使用 Cassandra 分布式数据库和 Spring Data Cassandra 的 Starter Pom
spring-boot-starter-data-cassandra-reactive 使用 Cassandra 分布式数据库和 Spring Data Cassandra Reactive 的 Starter Pom
spring-boot-starter-data-couchbase 使用 Couchbase 面向文档的数据库和 Spring Data Couchbase 的 Starter Pom
spring-boot-starter-data-couchbase-reactive 使用 Couchbase 面向文档的数据库和 Spring Data Couchbase Reactive 的 Starter Pom
spring-boot-starter-data-elasticsearch 使用 Elasticsearch 搜索和分析引擎以及 Spring Data Elasticsearch 的 Starter 者 Pom
spring-boot-starter-data-jdbc 使用 Spring Data JDBC 的 Starter Pom
spring-boot-starter-data-jpa 将 Spring Data JPA 与 Hibernate 结合使用的 Starter Pom
spring-boot-starter-data-ldap 使用 Spring Data LDAP 的 Starter Pom
spring-boot-starter-data-mongodb 使用 MongoDB 面向文档的数据库和 Spring Data MongoDB 的 Starter Pom
spring-boot-starter-data-mongodb-reactive 使用 MongoDB 面向文档的数据库和 Spring Data MongoDB Reactive 的 Starter Pom
spring-boot-starter-data-neo4j 使用 Neo4j 图形数据库和 Spring Data Neo4j 的 Starter Pom
spring-boot-starter-data-redis 使用 Redis 键值数据存储与 Spring Data Redis 和 Lettuce Client 端的 Starter Pom
spring-boot-starter-data-redis-reactive 将 Redis 键值数据存储与 Spring Data Redis Reacting 和 Lettuce Client 端一起使用的 Starter Pom
spring-boot-starter-data-rest 使用 Spring Data REST 在 REST 上公开 Spring Data 存储库的 Starter Pom
spring-boot-starter-data-solr 结合使用 Apache Solr 搜索平台和 Spring Data Solr 的 Starter 者 Pom
spring-boot-starter-freemarker 使用 FreeMarker 视图构建 MVC Web 应用程序的 Starter Pom
spring-boot-starter-groovy-templates 使用 Groovy 模板视图构建 MVC Web 应用程序的 Starter Pom
spring-boot-starter-hateoas 使用 Spring MVC 和 Spring HATEOAS 构建基于超媒体的 RESTful Web 应用程序的 Starter 者 Pom
spring-boot-starter-integration 使用 Spring Integration 的 Starter Pom
spring-boot-starter-jdbc 结合使用 JDBC 和 HikariCP 连接池的 Starter Pom
spring-boot-starter-jersey 使用 JAX-RS 和 Jersey 构建 RESTful Web 应用程序的 Starter。 spring-boot-starter-web的替代品 Pom
spring-boot-starter-jooq 使用 jOOQ 访问 SQL 数据库的 Starter。替代spring-boot-starter-data-jpaspring-boot-starter-jdbc Pom
spring-boot-starter-json 读写 JSON Starter Pom
spring-boot-starter-jta-atomikos 使用 Atomikos 的 JTATransactionStarter Pom
spring-boot-starter-jta-bitronix 使用 Bitronix 的 JTATransactionStarter Pom
spring-boot-starter-mail 开始使用 Java Mail 和 Spring Framework 的电子邮件发送支持 Pom
spring-boot-starter-mustache 使用 Mustache 视图构建 Web 应用程序的 Starter Pom
spring-boot-starter-oauth2-client 使用 Spring Security 的 OAuth2/OpenID Connect Client 端功能的 Starter Pom
spring-boot-starter-oauth2-resource-server 使用 Spring Security 的 OAuth2 资源服务器功能的 Starter Pom
spring-boot-starter-quartz Starter 使用 Quartz Scheduler Pom
spring-boot-starter-security 使用 Spring Security 的 Starter Pom
spring-boot-starter-test 用于使用包括 JUnit,Hamcrest 和 Mockito 在内的库测试 Spring Boot 应用程序的 Starter 程序 Pom
spring-boot-starter-thymeleaf 使用 Thymeleaf 视图构建 MVC Web 应用程序的 Starter Pom
spring-boot-starter-validation 通过 Hibernate Validator 使用 Java Bean 验证的 Starter Pom
spring-boot-starter-web 使用 Spring MVC 构建 Web(包括 RESTful)应用程序的 Starter 者。使用 Tomcat 作为默认的嵌入式容器 Pom
spring-boot-starter-web-services 使用 Spring Web Services 的 Starter Pom
spring-boot-starter-webflux 使用 Spring Framework 的反应式 Web 支持构建 WebFlux 应用程序的 Starter 者 Pom
spring-boot-starter-websocket 使用 Spring Framework 的 WebSocket 支持构建 WebSocket 应用程序的 Starter Pom

除应用程序启动程序外,以下启动程序还可用于添加* production ready *功能:

表 13.2 Spring Boot 生产启动器

Name Description Pom
spring-boot-starter-actuator 使用 Spring Boot 的 Actuator 的 Starter 程序,它提供了生产就绪功能,可帮助您监视和 Management 应用程序 Pom

最后,Spring Boot 还包括以下启动程序,如果您想排除或交换特定的技术方面,可以使用这些启动程序:

表 13.3 Spring Boot 技术 Starter

Name Description Pom
spring-boot-starter-jetty 使用 Jetty 作为嵌入式 servlet 容器的 Starter 者。 spring-boot-starter-tomcat的替代品 Pom
spring-boot-starter-log4j2 使用 Log4j2 进行日志记录的启动器。 spring-boot-starter-logging的替代品 Pom
spring-boot-starter-logging 使用 Logback 进行日志记录的启动器。默认记录启动器 Pom
spring-boot-starter-reactor-netty 使用 Reactor Netty 作为嵌入式反应式 HTTP 服务器的 Starter 者。 Pom
spring-boot-starter-tomcat 使用 Tomcat 作为嵌入式 servlet 容器的 Starter。 spring-boot-starter-web使用的默认 servlet 容器启动器 Pom
spring-boot-starter-undertow 使用 Undertow 作为嵌入式 servlet 容器的 Starter。 spring-boot-starter-tomcat的替代品 Pom

Tip

有关其他社区贡献的 Starter 者的列表,请参阅 GitHub spring-boot-starters模块中的README file

上一章 首页 下一章