3.1.1 依赖管理

优质
小牛编辑
119浏览
2023-12-01

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

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

管理列表包含了您可以在SpringBoot中使用的所有Spring模块,以及一个完善的第三方库列表。该列表可作为标准的配件清单(spring-boot-dependencies)提供,可与Maven和Gradle一起使用。

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

3.1.2 Maven

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

  • Java 1.8作为默认编译器级别。
  • UTF-8源编码。
  • 继承自spring-boot-dependencies pom的依赖关系管理部分,用于管理公共依赖关系的版本。 此依赖关系管理允许您在自己的pom中使用时省略这些依赖项的标记。
  • 带有重新打包执行id的重打包目标的执行。
  • 合理的资源过滤。
  • 合理的插件配置 (exec plugin, Git commit ID, and shade)
  • application.properties和application.yml的合理资源过滤,包括特定于配置文件的文件(例如,application-dev.properties和application-dev.yml)

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

3.1.2.1 继承Starter Parent

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

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

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

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

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

检查spring-boot-dependencies pom以获取支持的属性列表。

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

不是每个人都喜欢继承spring-boot-starter-parent POM。 您可能拥有自己需要使用的公司标准父级,或者您可能更愿意明确声明所有Maven配置。

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

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

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

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

3.1.2.3 使用Spring Boot Maven插件

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

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

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

3.1.3 Gradle

要了解如何将Spring Boot与Gradle一起使用,请参阅Spring Boot的Gradle插件的文档:

  • Reference (HTML and PDF)
  • API

3.1.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.3.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>

如果您不想使用spring-boot-antlib模块,请参见第9.16.9节“从Ant构建可执行文件,而不使用spring-boot-antlib”“操作方法”。

3.1.5 Starters

启动器是一组方便的依赖关系描述符,您可以在应用程序中包含这些描述符。 您可以获得所需的所有Spring和相关技术的一站式服务,而无需查看示例代码和复制粘贴依赖描述符的负载。 例如,如果要开始使用Spring和JPA进行数据库访问,请在项目中包含spring-boot-starter-data-jpa依赖项。

启动器包含许多依赖项,这些依赖项是使项目快速启动和运行所需的依赖项,以及一组受支持的托管传递依赖项。

名字里有什么 所有官方首发都遵循类似的命名模式; spring-boot-starter- ,其中是特定类型的应用程序。 此命名结构旨在帮助您找到启动器。 许多IDE中的Maven集成允许您按名称搜索依赖项。 例如,安装了适当的Eclipse或STS插件后,您可以在POM编辑器中按ctrl-space并输入“spring-boot-starter”以获取完整列表。 正如“创建自己的启动器”部分所述,第三方启动器不应该以spring-boot启动,因为它是为官方Spring Boot工件保留的。 相反,第三方启动器通常以项目名称开头。 例如,名为thirdpartyproject的第三方启动项目通常被命名为thirdpartyproject-spring-boot-starter。

以下应用程序启动程序由org.springframework.boot组下的Spring Boot提供:

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

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

除应用程序启动器外,还可以使用以下启动器添加生产就绪功能:

表13.2 Spring Boot生产启动器

名称描述Pom
spring-boot-starter-actuator使用Spring Boot的Actuator的启动器,它提供生产就绪功能,帮助您监控和管理您的应用程序Pom

最后,如果要排除或交换特定的技术方面,Spring Boot还包括以下启动器:

表13.3 Spring Boot技术启动器

名称描述Pom
spring-boot-starter-jetty使用Jetty作为嵌入式servlet容器的启动器。 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服务器的启动器。Pom
spring-boot-starter-tomcat使用Tomcat作为嵌入式servlet容器的启动器。 spring-boot-starter-web使用的默认servlet容器启动器Pom
spring-boot-starter-undertow使用Undertow作为嵌入式servlet容器的启动器。 spring-boot-starter-tomcat的替代品Pom

有关其他社区贡献启动器的列表,请参阅GitHub上spring-boot-starters模块中的README文件。