本指南显示了如何为Spring Boot 2.0构建新的Gradle项目。首先,我们展示一些Spring Boot及其Gradle插件的值得注意的功能。接下来,我们将设置Gradle项目,应用Spring Boot插件,使用Gradle BOM支持来定义依赖项并创建示例项目。
值得注意的Spring Boot 2功能
当Spring Boot使用Spring Framework 5.x时,由于支持Java 9,最低Java版本已提高到8。在此版本中,Spring还包括对Kotlin 1.2.x的支持。
除此之外,它现在完全支持Reactive Spring,您可以使用它来构建响应式应用程序。Spring Boot提供的整个自动配置机制也已经通过MongoDB,Redis等其他一些新的响应版本得到了丰富。
Spring Boot Gradle插件经过重大改进,具有以下改进:
-
为了构建可执行的jar和war,该
bootRepackage
任务已分别替换为bootJar
和bootWar
。 -
该插件本身不再自动应用Spring Dependency Management插件。相反,它确实对已应用
spring-boot-dependencies
BOM 并配置有BOM 的Spring Dependency Management插件做出了反应(物料清单。在本文后面的部分中,我们将详细介绍BOM支持)。
你需要什么
-
约12分钟
-
文本编辑器或IDE
-
Java开发套件(JDK),版本1.8或更高版本
-
一个Gradle,版本4.6或更高
初始化Gradle项目
首先,我们需要初始化Gradle项目。为此,我们使用Gradle的init
任务来创建带有空构建文件的模板项目。生成的项目包括开箱即用的Gradle包装器,以便您可以轻松地与未在本地安装Gradle的用户共享该项目。它还添加了默认源目录,测试依赖项和JCenter作为默认依赖项存储库。请查看其文档以了解有关该init
任务的更多信息。
首先,我们需要在主目录中创建示例项目文件夹,并初始化项目:
$ mkdir gradle-spring-boot-project
$ cd gradle-spring-boot-project
$ gradle init --type java-application
> Task :wrapper
Select build script DSL:
1: Groovy
2: Kotlin
Enter selection (default: Groovy) [1..2]
Select test framework:
1: JUnit 4
2: TestNG
3: Spock
4: JUnit Jupiter
Enter selection (default: JUnit 4) [1..4]
Project name (default: gradle-spring-boot-project):
Source package (default: gradle.spring.boot.project):
> Task :init
Get more help with your project: https://docs.gradle.org/6.0.1/userguide/tutorial_java_projects.html
BUILD SUCCESSFUL
2 actionable tasks: 2 executed
生成的项目具有以下结构:
gradle-spring-boot-project
├── build.gradle
├── gradle
│ └── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
├── settings.gradle
└── src
├── main
│ └── java
│ └── App.java
└── test
└── java
└── AppTest.java
接下来,我们需要应用Spring Boot插件并定义依赖项。
应用Spring Boot插件并配置依赖项
Spring提供了一个独立的Spring Boot Gradle插件,该插件添加了一些任务和配置,以简化基于Spring Boot的项目的工作。首先,我们首先需要应用插件。为此,打开build.gradle
文件并修改plugin
块,使其看起来像以下片段:
plugins {
id 'java'
id 'org.springframework.boot' version '2.0.5.RELEASE'
id 'io.spring.dependency-management' version '1.0.7.RELEASE'
}
接下来,由于我们没有使用Spring的依赖管理插件,因此需要添加编译和运行示例所需的依赖。为此,我们使用了Gradle的BOM支持,并加载了Spring Boot BOM文件,以便能够使用正确的版本解析所有必需的依赖项。
如果您想了解有关Gradle BOM支持的更多信息,请访问此页面。
dependencies
,请如下所示修改块。此代码片段将使用指定的Spring Boot版本将Spring Boot BOM文件添加为第一个依赖项。其他依赖项不需要具有特定版本,因为这些依赖项是在BOM表文件中隐式定义的。
dependencies {
implementation 'org.springframework.boot:spring-boot-dependencies:2.0.5.RELEASE'
implementation 'org.springframework.boot:spring-boot-starter-web'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
components {
withModule('org.springframework:spring-beans') {
allVariants {
withDependencyConstraints {
// Need to patch constraints because snakeyaml is an optional dependency
it.findAll { it.name == 'snakeyaml' }.each { it.version { strictly '1.19' } }
}
}
}
}
}
为了符合Spring Boot BOM,该components
块必须严格使用snakeyaml
带有版本的依赖,1.19
因为该spring-beans
依赖具有版本1.20
作为传递性依赖。
如果使用5.0之前的Gradle版本,则需要通过settings.gradle
在项目根目录中的文件中添加以下行来启用此功能:
如果您想探索所使用的依赖项的版本,包括哪些传递性依赖项,或者查看您在哪里有冲突,可以在构建扫描中找到此信息。
以下屏幕截图显示了构建扫描的“依赖项”部分的示例:
对于示例应用程序,我们创建一个简单的“ Hello Gradle”应用程序。首先,我们需要将App
和AppTest
类移动到一个hello
包中,以方便进行Spring的组件扫描。为此,创建src/main/java/hello
和src/test/java/hello
目录,将各自的类移动到文件夹中。
接下来,修改文件夹中的App
类,src/main/java/hello
并用以下内容替换其内容:
package hello;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class, args);
}
}
package hello;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController("/")
public class HelloGradleController {
@GetMapping
public String helloGradle() {
return "Hello Gradle!";
}
}
在以上代码段中,我们创建了一个新的Spring Boot应用程序,当在应用程序的根路径上处理请求时,HelloGradleController
它将返回Hello Gradle!
一个GET
。
要测试此功能,我们需要创建一个集成测试。为此,请修改文件夹中的AppTest
类,src/test/java/hello
并用以下内容替换其内容:
package hello;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.web.servlet.MockMvc;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
@RunWith(SpringRunner.class)
@SpringBootTest(classes = App.class)
@AutoConfigureMockMvc
public class AppTest {
@Autowired
private MockMvc mvc;
@Test
public void helloGradle() throws Exception {
mvc.perform(get("/"))
.andExpect(status().isOk())
.andExpect(content().string("Hello Gradle!"));
}
}
该helloGradle
测试方法旋转起来的App
春天启动应用程序,并做了当断言返回的内容GET
的根路径上的请求。
最后一步,我们需要为Spring Boot jar文件定义主类名称。为此,我们需要mainClassName
在bootJar
配置闭包上定义属性。将以下代码段添加到中build.gradle
,然后我们就可以运行Spring Boot应用程序了。
bootJar {
mainClassName = 'hello.App'
}
构建并运行Spring Boot应用程序
要构建可执行jar,可以执行以下命令:
$ ./gradlew bootJar
可执行jar位于build/libs
目录中,您可以通过执行以下命令来运行它:
$ java -jar build/libs/gradle-spring-boot-project.jar
运行应用程序的另一种方法是通过执行以下Gradle命令:
$ ./gradlew bootRun
该命令将8080
直接在默认端口上运行Spring Boot应用程序。成功启动后,您可以打开浏览器并访问http://localhost:8080,并且应该Hello Gradle!
在浏览器窗口中看到该消息。
从现有的Spring Boot 1.5项目迁移
如果您已经有一个1.5.x Spring Boot项目,并且想要迁移到更新的2.x版本,则可以遵循本指南。请仔细阅读升级说明,以成功升级到最新的Spring Boot Gradle插件。
下一步
既然您已经知道了新的Spring Boot Gradle插件的基础知识,就可以阅读其文档以获取更多详细信息。
如果您对构建扫描以及内部构建的更多度量标准和工具感兴趣,还请查看Gradle Enterprise。