强烈建议你选择一个支持依赖管理,能消费发布到"Maven中央仓库"的artifacts的构建系统,比如Maven或Gradle。使用其他构建系统也是可以的,比如Ant,但它们可能得不到很好的支持。
Spring Boot每次发布时都会提供一个它所支持的精选依赖列表。实际上,在构建配置里你不需要提供任何依赖的版本,因为Spring Boot已经替你管理好了。当更新Spring Boot时,那些依赖也会一起更新。
注 如果有必要,你可以指定依赖的版本来覆盖Spring Boot默认版本。
精选列表包括所有能够跟Spring Boot一起使用的Spring模块及第三方库,该列表可以在材料清单(spring-boot-dependencies)获取到,也可以找到一些支持Maven和Gradle的资料。
注 Spring Boot每次发布都关联一个Spring框架的基础版本,所以强烈建议你不要自己指定Spring版本。
Maven用户可以继承spring-boot-starter-parent
项目来获取合适的默认设置。该parent项目提供以下特性:
- 默认编译级别为Java 1.6
- 源码编码为UTF-8
- 一个Dependency management节点,允许你省略常见依赖的<version>
标签,继承自spring-boot-dependencies
POM。
- 恰到好处的资源过滤
- 恰到好处的插件配置(exec插件,surefire,Git commit ID,shade)
- 恰到好处的对application.properties
和application.yml
进行筛选,包括特定profile(profile-specific)的文件,比如application-foo.properties
和application-foo.yml
最后一点:由于配置文件默认接收Spring风格的占位符(${...}
),所以Maven filtering需改用@..@
占位符(你可以使用Maven属性resource.delimiter
来覆盖它)。
如果你想配置项目,让其继承自spring-boot-starter-parent
,只需将parent
按如下设置:
<!-- Inherit defaults from Spring Boot -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.4.1.BUILD-SNAPSHOT</version>
</parent>
注:你应该只需在该依赖上指定Spring Boot版本,如果导入其他的starters,放心的省略版本号好了。
按照以上设置,你可以在自己的项目中通过覆盖属性来覆盖个别的依赖。例如,你可以将以下设置添加到pom.xml
中来升级Spring Data到另一个发布版本。
<properties>
<spring-data-releasetrain.version>Fowler-SR2</spring-data-releasetrain.version>
</properties>
注 查看spring-boot-dependencies pom获取支持的属性列表。
不是每个人都喜欢继承spring-boot-starter-parent
POM,比如你可能需要使用公司的标准parent,或只是倾向于显式声明所有的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>1.4.1.BUILD-SNAPSHOT</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>
<scope>import</scope>
<type>pom</type>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>1.4.1.BUILD-SNAPSHOT</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
注 示例中,我们指定了一个BOM,但任何的依赖类型都可以通过这种方式覆盖。
spring-boot-starter-parent
选择了相当保守的Java兼容策略,如果你遵循我们的建议,使用最新的Java版本,可以添加一个java.version
属性:
<properties>
<java.version>1.8</java.version>
</properties>
spring-boot-starter-parent
选择了相当保守的Java兼容策略,如果你遵循我们的建议,使用最新的Java版本,可以添加一个java.version
属性:
<properties>
<java.version>1.8</java.version>
</properties>
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,你只需添加该插件而无需配置它,除非你想改变定义在partent中的设置。
Gradle用户可以直接在它们的dependencies
节点处导入”starters“。跟Maven不同的是,这里不用导入"super parent",也就不能共享配置。
apply plugin: 'java'
repositories {
maven { url "http://repo.spring.io/snapshot" }
maven { url "http://repo.spring.io/milestone" }
}
dependencies {
compile("org.springframework.boot:spring-boot-starter-web:1.4.1.BUILD-SNAPSHOT")
}
跟maven类似,spring boot也有gradle插件spring-boot-gradle-plugin,它能够提供任务用于创建可执行jar,或从源码(source)运行项目。它也提供依赖管理的能力,该功能允许你省略Spring Boot管理的任何依赖的version版本号:
buildscript {
repositories {
maven { url "http://repo.spring.io/snapshot" }
maven { url "http://repo.spring.io/milestone" }
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:1.4.1.BUILD-SNAPSHOT")
}
}
apply plugin: 'java'
apply plugin: 'spring-boot'
repositories {
maven { url "http://repo.spring.io/snapshot" }
maven { url "http://repo.spring.io/milestone" }
}
dependencies {
compile("org.springframework.boot:spring-boot-starter-web")
testCompile("org.springframework.boot:spring-boot-starter-test")
}
使用Apache Ant+Ivy构建Spring Boot项目是完全可能的。spring-boot-antlib
AntLib模块能够帮助Ant创建可执行jars,一个传统的用于声明依赖的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="1.3.0.BUILD-SNAPSHOT" />
<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
模块,那查看Section 81.10, “Build an executable archive from Ant without using spring-boot-antlib”获取更多指导。
Starters是一个依赖描述符的集合,你可以将它包含进项目中,这样添加依赖就非常方便。你可以获取所有Spring及相关技术的一站式服务,而不需要翻阅示例代码,拷贝粘贴大量的依赖描述符。例如,如果你想使用Spring和JPA进行数据库访问,只需要在项目中包含spring-boot-starter-data-jpa
依赖,然后你就可以开始了。
该starters包含很多搭建,快速运行项目所需的依赖,并提供一致的,可管理传递性的依赖集。
名字有什么含义:所有官方starters遵循相似的命名模式:spring-boot-starter-*
,在这里*
是一种特殊的应用程序类型。该命名结构旨在帮你找到需要的starter。很多集成于IDEs中的Maven插件允许你通过名称name搜索依赖。例如,使用相应的Eclipse或STS插件,你可以简单地在POM编辑器中点击ctrl-space
,然后输入"spring-boot-starter"就可以获取一个完整列表。正如Creating your own starter章节中讨论的,第三方starters不应该以spring-boot
开头,因为它跟Spring Boot官方artifacts冲突。一个acme的第三方starter通常命名为acme-spring-boot-starter
。
以下应用程序starters是Spring Boot在org.springframework.boot
group下提供的:
表 13.1. Spring Boot application starters
名称 | 描述 | Pom |
---|---|---|
spring-boot-starter-test | 用于测试Spring Boot应用,支持常用测试类库,包括JUnit, Hamcrest和Mockito | Pom |
spring-boot-starter-mobile | 用于使用Spring Mobile开发web应用 | Pom |
spring-boot-starter-social-twitter | 对使用Spring Social Twitter的支持 | Pom |
spring-boot-starter-cache | 用于使用Spring框架的缓存支持 | Pom |
spring-boot-starter-activemq | 用于使用Apache ActiveMQ实现JMS消息 | Pom |
spring-boot-starter-jta-atomikos | 用于使用Atomikos实现JTA事务 | Pom |
spring-boot-starter-aop | 用于使用Spring AOP和AspectJ实现面向切面编程 | Pom |
spring-boot-starter-web | 用于使用Spring MVC构建web应用,包括RESTful。Tomcat是默认的内嵌容器 | Pom |
spring-boot-starter-data-elasticsearch | 用于使用Elasticsearch搜索,分析引擎和Spring Data Elasticsearch | Pom |
spring-boot-starter-jdbc | 对JDBC的支持(使用Tomcat JDBC连接池) | Pom |
spring-boot-starter-batch | 对Spring Batch的支持 | Pom |
spring-boot-starter-social-facebook | 用于使用Spring Social Facebook | Pom |
spring-boot-starter-web-services | 对Spring Web服务的支持 | Pom |
spring-boot-starter-jta-narayana | Spring Boot Narayana JTA Starter | Pom |
spring-boot-starter-thymeleaf | 用于使用Thymeleaf模板引擎构建MVC web应用 | Pom |
spring-boot-starter-mail | 用于使用Java Mail和Spring框架email发送支持 | Pom |
spring-boot-starter-jta-bitronix | 用于使用Bitronix实现JTA事务 | Pom |
spring-boot-starter-data-mongodb | 用于使用基于文档的数据库MongoDB和Spring Data MongoDB | Pom |
spring-boot-starter-validation | 用于使用Hibernate Validator实现Java Bean校验 | Pom |
spring-boot-starter-jooq | 用于使用JOOQ访问SQL数据库,可使用spring-boot-starter-data-jpa或spring-boot-starter-jdbc替代 | Pom |
spring-boot-starter-redis | 用于使用Spring Data Redis和Jedis客户端操作键-值存储的Redis,在1.4中已被spring-boot-starter-data-redis取代 | Pom |
spring-boot-starter-data-cassandra | 用于使用分布式数据库Cassandra和Spring Data Cassandra | Pom |
spring-boot-starter-hateoas | 用于使用Spring MVC和Spring HATEOAS实现基于超媒体的RESTful web应用 | Pom |
spring-boot-starter-integration | 用于使用Spring Integration | Pom |
spring-boot-starter-data-solr | 通过Spring Data Solr使用Apache Solr搜索平台 | Pom |
spring-boot-starter-freemarker | 用于使用FreeMarker模板引擎构建MVC web应用 | Pom |
spring-boot-starter-jersey | 用于使用JAX-RS和Jersey构建RESTful web应用,可使用spring-boot-starter-web替代 | Pom |
spring-boot-starter | 核心starter,包括自动配置支持,日志和YAML | Pom |
spring-boot-starter-data-couchbase | 用于使用基于文档的数据库Couchbase和Spring Data Couchbase | Pom |
spring-boot-starter-artemis | 使用Apache Artemis实现JMS消息 | Pom |
spring-boot-starter-cloud-connectors | 对Spring Cloud Connectors的支持,用于简化云平台下(例如Cloud Foundry 和Heroku)服务的连接 | Pom |
spring-boot-starter-social-linkedin | 用于使用Spring Social LinkedIn | Pom |
spring-boot-starter-velocity | 用于使用Velocity模板引擎构建MVC web应用,从1.4版本过期 | Pom |
spring-boot-starter-data-rest | 用于使用Spring Data REST暴露基于REST的Spring Data仓库 | Pom |
spring-boot-starter-data-gemfire | 用于使用分布式数据存储GemFire和Spring Data GemFire | Pom |
spring-boot-starter-groovy-templates | 用于使用Groovy模板引擎构建MVC web应用 | Pom |
spring-boot-starter-amqp | 用于使用Spring AMQP和Rabbit MQ | Pom |
spring-boot-starter-hornetq | 用于使用HornetQ实现JMS消息,被spring-boot-starter-artemis取代 | Pom |
spring-boot-starter-ws | 用于使用Spring Web服务,被spring-boot-starter-web-services取代 | Pom |
spring-boot-starter-security | 对Spring Security的支持 | Pom |
spring-boot-starter-data-redis | 用于使用Spring Data Redis和Jedis客户端操作键—值数据存储Redis | Pom |
spring-boot-starter-websocket | 用于使用Spring框架的WebSocket支持构建WebSocket应用 | Pom |
spring-boot-starter-mustache | 用于使用Mustache模板引擎构建MVC web应用 | Pom |
spring-boot-starter-data-neo4j | 用于使用图数据库Neo4j和Spring Data Neo4j | Pom |
spring-boot-starter-data-jpa | 用于使用Hibernate实现Spring Data JPA | Pom |
除了应用程序starters,以下starters可用于添加production ready的功能:
表 13.2. Spring Boot生产级starters
名称 | 描述 | Pom |
---|---|---|
spring-boot-starter-actuator | 用于使用Spring Boot的Actuator,它提供了production ready功能来帮助你监控和管理应用程序 | Pom |
spring-boot-starter-remote-shell | 用于通过SSH,使用CRaSH远程shell监控,管理你的应用 | Pom |
最后,Spring Boot还包含一些用于排除或交换某些特定技术方面的starters:
表 13.3. Spring Boot技术性starters
名称 | 描述 | Pom |
---|---|---|
spring-boot-starter-undertow | 用于使用Undertow作为内嵌servlet容器,可使用spring-boot-starter-tomcat替代 | Pom |
spring-boot-starter-logging | 用于使用Logback记录日志,默认的日志starter | Pom |
spring-boot-starter-tomcat | 用于使用Tomcat作为内嵌servlet容器,spring-boot-starter-web使用的默认servlet容器 | Pom |
spring-boot-starter-jetty | 用于使用Jetty作为内嵌servlet容器,可使用spring-boot-starter-tomcat替代 | Pom |
spring-boot-starter-log4j2 | 用于使用Log4j2记录日志,可使用spring-boot-starter-logging代替 | Pom |
注:查看GitHub上位于spring-boot-starters
模块内的README文件,可以获取到一个社区贡献的其他starters列表。