强烈建议你选择一个支持依赖管理的构建系统,而且可使用发布到“Maven中心”存储库的工件。咱们建议你选择Maven或Gradle,可让Spring Boot与其余构建系统(例如Ant)一块儿工做,可是它们并非特别受支持。html
Spring Boot的每个版本都提供了它所支持的一个被整理的依赖项列表,实际上,在构建配置中,你不须要为这些依赖项提供一个版本,由于Spring Boot为你管理这些依赖项,当你升级Spring Boot自己时,这些依赖项也会以一致的方式升级。java
若是须要,你仍然能够指定一个版本并覆盖Spring Boot的建议。
通过管理的列表包含全部spring模块,你可使用spring Boot以及一个通过细化的第三方库列表,这个列表能够做为一个标准的材料清单(spring-boot-dependencies
),它能够与Maven和Gradle一块儿使用。react
Spring Boot的每一个版本都与Spring框架的一个基本版本相关联,咱们强烈建议你不要指定它的版本。
Maven用户能够从spring-boot-starter-parent
项目继承来得到合理的默认值,父项目提供了如下特性:git
spring-boot-dependencies
pom,管理通用依赖项的版本,这个依赖项管理容许你在本身的pom中使用这些依赖项时省略<版本>标记。application.properties
和指定属性的文件的application.yml
(例如,application-dev.properties
和application-dev.yml
) 的合理资源过滤。注意,因为application.properties
和application.yml
文件接受Spring样式的占位符(${…}
),Maven过滤被更改成使用@..@
占位符。(你能够经过设置一个名为resource.delimiter
的Maven属性来覆盖它。)github
要将你的项目配置为从spring-boot-starter-parent
继承,请将parent
设置为:web
<!-- Inherit defaults from Spring Boot --> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.5.RELEASE</version> </parent>
你应该仅在此依赖项上指定Spring Boot版本号,若是你导入额外的启动器,你能够安全地省略版本号。
经过这种设置,你还能够经过在本身的项目中覆盖一个属性来覆盖单个依赖项。例如,要升级到另外一个Spring Data release train,你须要将如下内容添加到你的pom.xml
:redis
<properties> <spring-data-releasetrain.version>Fowler-SR2</spring-data-releasetrain.version> </properties>
检查 spring-boot-dependencies pom,以得到支持的属性列表。
并非每一个人都喜欢从spring-booot-starter-parent
POM继承,你可能有你本身的企业标准父类,你须要使用它们,或者你可能倾向于显式地声明全部的Maven配置。spring
若是你不想使用spring-boot-starter-parent
,那么你仍然可使用scope=import
依赖项来保持依赖管理(但不是插件管理)的好处:mongodb
<dependencyManagement> <dependencies> <dependency> <!-- Import dependency management from Spring Boot --> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>2.0.5.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
前面的示例设置不容许你使用属性来覆盖单个依赖项,如上所述。为了达到一样的结果,在spring-boot-dependencies
进入以前,须要对你的项目dependencyManagement
添加一个条目。例如,要升级到另外一个Spring Data release train,你能够将如下元素添加到你的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.0.5.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
在前面的示例中,咱们指定了一个BOM,可是任何依赖类型均可以以相同的方式被覆盖。
Spring Boot包括一个Maven插件,它能够将项目打包为可执行jar,若是你想要使用它,请将插件添加到你的<plugins>
部分,以下面的示例所示:
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>
若是你使用Spring Boot starter parent pom,你只须要添加插件,不须要对其进行配置,除非你想更改parent中定义的设置。
要了解使用Gradle的Spring Boot,请参考Spring Boot的Gradle插件的文档:
可使用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>
一个典型的buld.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.0.5.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
模块,请参见第87.9节,“从Ant构建一个可执行的存档,而不使用spring-boot-antlib” “How-to”。
Starters是一组方便的依赖描述符,你能够将它们包括在应用程序中,你能够得到所需的全部Spring和相关技术的一站式服务,而无需搜索示例代码和复制粘贴依赖描述符的负载。例如,若是你想要开始使用Spring和JPA进行数据库访问,请在项目中包含Spring-boot-starter-data-JPA
依赖项。
starters包含大量的依赖项,你须要经过一个一致的、受支持的管理传递依赖集来快速地启动项目并运行。
叫什么名称
全部官方 starters都遵循相似的命名模式;
spring-boot-starter-*
,其中*
是一种特殊类型的应用程序。这种命名结构旨在帮助你找到一个starter,许多IDE中的Maven集成让你能够经过名称搜索依赖项。例如,若是安装了适当的Eclipse或STS插件,你能够在POM编辑器中按下ctrl-space
,并在一个完整的列表中键入“spring-boot-starter”。正如在“建立你本身的starter”部分中所解释的,第三方starter不该该从
Spring-Boot
开始,由于它是为官方Spring Boot工件预留的。相反,第三方starter一般以项目的名称开始,例如,一个名为thirdpartyproject
的第三方启动项目一般会被命名为thirdpartyproject-spring-boot-starter
。
下列应用程序starter由org.springframework.boot
组下的Spring Boot提供:
表13.1. Spring Boot应用程序starter
名称 | 描述 | Pom |
---|---|---|
spring-boot-starter |
核心启动器,包括自动配置支持,日志记录和YAML | Pom |
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 |
sspring-boot-starter-artemis |
使用Apache Artemis的JMS消息传递启动器 | Pom |
spring-boot-starter-batch |
使用Spring batch的启动器 | Pom |
spring-boot-starter-cache |
使用Spring框架缓存支持的启动器 | Pom |
spring-boot-starter-cloud-connectors |
使用Spring Cloud链接器,它简化了链接到云平台的服务,如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-jpa |
使用Hibernate的Spring Data JPA启动器 | 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 |
使用Redis键值数据存储和Spring Data Redis和Lettuce客户端的启动器 | Pom |
spring-boot-starter-data-redis-reactive |
使用Redis键值数据存储和Spring Data Redis Reactive和Lettuce客户端的启动器 | Pom |
spring-boot-starter-data-rest |
使用Spring Data 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-jta-narayana |
使用Narayana的JTA事务的启动器 | Pom |
spring-boot-starter-mail |
使用Java Mail和Spring框架的email发送支持的启动器 | Pom |
spring-boot-starter-mustache |
使用Mustache视图构建web应用程序的启动器 | 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 |
使用Hibernate验证器验证Java Bean的启动器 | 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框架的Reactive Web支持构建WebFlux应用程序的启动器 | Pom |
spring-boot-starter-websocket |
使用Spring框架的WebSocket支持构建WebSocket应用程序的启动器 | Pom |
除了应用程序starter以外,下面的启动器还能够用于添加生产就绪特性:
表13.2. Spring Boot生产starter
名称 | 描述 | 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做为嵌入式reactive HTTP服务器的启动器 | Pom |
spring-boot-starter-tomcat |
使用Tomcat做为嵌入式servlet容器的启动器,默认的servlet容器启动器使用spring-boot-starter-web | Pom |
spring-boot-starter-undertow |
使用Undertow做为嵌入式servlet容器的启动器,替代spring-boot-starter-tomcat |
Pom |
对于一个附加的社区贡献starter列表,请参阅GitHub上的
spring-boot-starters
模块中的
README文件。