使用Gradle構建Spring Boot 2應用程序

本指南顯示瞭如何爲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任務已分別替換爲bootJarbootWar

  • 該插件本身不再自動應用Spring Dependency Management插件。相反,它確實對已應用spring-boot-dependenciesBOM 並配置有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塊,使其看起來像以下片段:

build.gradle
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表文件中隱式定義的。
build.gradle
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在項目根目錄中的文件中添加以下行來啓用此功能:

settings.gradle

 

如果您想探索所使用的依賴項的版本,包括哪些傳遞性依賴項,或者查看您在哪裏有衝突,可以在構建掃描中找到此信息。

以下屏幕截圖顯示了構建掃描的“依賴項”部分的示例:

創建一個“ Hello Gradle”示例應用程序

對於示例應用程序,我們創建一個簡單的“ Hello Gradle”應用程序。首先,我們需要將AppAppTest類移動到一個hello包中,以方便進行Spring的組件掃描。爲此,創建src/main/java/hellosrc/test/java/hello目錄,將各自的類移動到文件夾中。

接下來,修改文件夾中的App類,src/main/java/hello並用以下內容替換其內容:

App.java
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);
    }

}
HelloGradleController.java
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並用以下內容替換其內容:

AppTest.java
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文件定義主類名稱。爲此,我們需要mainClassNamebootJar配置閉包上定義屬性。將以下代碼段添加到中build.gradle,然後我們就可以運行Spring Boot應用程序了。

build.gradle
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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章