赞
踩
本指南显示了如何为Spring Boot 2.0构建新的Gradle项目。首先,我们展示一些Spring Boot及其Gradle插件的值得注意的功能。接下来,我们将设置Gradle项目,应用Spring Boot插件,使用Gradle BOM支持来定义依赖项并创建示例项目。
当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的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提供了一个独立的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'
- }
要构建可执行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!
在浏览器窗口中看到该消息。
如果您已经有一个1.5.x Spring Boot项目,并且想要迁移到更新的2.x版本,则可以遵循本指南。请仔细阅读升级说明,以成功升级到最新的Spring Boot Gradle插件。
既然您已经知道了新的Spring Boot Gradle插件的基础知识,就可以阅读其文档以获取更多详细信息。
如果您对构建扫描以及内部构建的更多度量标准和工具感兴趣,还请查看Gradle Enterprise。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。