本指南顯示瞭如何爲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。