On this page
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 引导相关性)可用,可以与Maven和Gradle一起使用。
Warning
每个 Spring Boot 版本都与 Spring Framework 的基本版本相关联。我们强烈建议您不要指定其版本。
13.2 Maven
Maven 用户可以从spring-boot-starter-parent
项目继承来获取合理的默认值。父项目提供以下功能:
Java 1.8 是默认的编译器级别。
UTF-8 源编码。
继承自 spring-boot-dependencies pom 的依赖性 Management 部分,用于 Management 常见依赖项的版本。当在您自己的 pom 中使用这些依赖关系时,可以为这些依赖关系省略标记。
带有
repackage
执行 ID 的repackage goal的执行。Sensible resource filtering.
合理的插件配置(exec plugin,Git 提交 ID和shade)。
application.properties
和application.yml
的敏感资源过滤,包括特定于配置文件的文件(例如application-dev.properties
和application-dev.yml
)
请注意,由于application.properties
和application.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-jpa或spring-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。