領先一步
VMware 提供培訓和認證,助力您加速進步。
瞭解更多生成 Spring Boot 專案最快的方式是透過 start.spring.io。該網站提供了一個精選的依賴列表,您可以根據所選的 Spring Boot 版本將其新增到您的應用程式中。您還可以選擇專案的語言、構建系統和 JVM 版本。多年來,start.spring.io 作為生成 Spring 專案的工具,其受歡迎程度呈指數級增長,每年都有數百萬個專案透過該網站生成。
在過去的幾個月裡,我們一直在對專案生成 API 進行全面改革。為了更好地理解其背後的動機,請看下面的專案結構:
initializr-generator
是包含專案生成 API 核心的庫。initializr-web
包含 REST 端點以及與 Web UI 相關的所有內容。initializr-site
包含 start.spring.io 上可用的所有定製。現有 API 的問題在於,對於任何想要定製專案生成的人來說,唯一合理的方法是分叉庫並擴充套件或修改 ProjectGenerator
類。這導致了相當笨拙的開發者體驗。
新 API 的主要目標是在不分叉庫的情況下允許定製生成的專案。為了實現專案各方面的貢獻模型,我們為每個方面提供了抽象。這些抽象包括
.gitignore
和基本配置檔案模型這些抽象通過幾個鉤子點提供,您可以使用它們來定製專案資產
BuildCustomizer
用於新增依賴、外掛或其他配置項ProjectContributor
,一個用於向目錄結構新增資產的高階鉤子點該庫提供了多種條件,以便可以根據請求的專案應用定製器。以下示例說明了如何在請求 war
打包時,調整 Gradle 構建以應用 war
外掛
@Bean
@ConditionalOnPackaging(WarPackaging.ID)
public BuildCustomizer<GradleBuild> warPluginContributor() {
return (build) -> build.addPlugin("war");
}
其思想是定製器可以在外部模組中定義(有點類似於 Spring Boot 中的自動配置),而無需修改庫。
作為重構的一部分,我們還改進了專案結構。
ProjectContributor
、BuildCustomizer
等頂層概念位於 initializr-generator
中。該模組還包含了實際生成專案所需的最少基礎設施。initializr-generator-spring
為我們希望為 Spring 專案生成的專案結構提供了貢獻者。此外,程式碼現在在 GitHub 上拆分到兩個倉庫中,一個用於庫,另一個用於start-site
,它代表了我們在 start.spring.io 上的生產例項。
新的專案生成 API 使我們能夠輕鬆地向 start.spring.io 新增許多功能。我們今天已經合併了這些功能,所以您可以立即使用它們。
生成本專案現在在專案根目錄中包含一個 HELP.md
檔案。該檔案根據應用程式中存在的依賴項進行定製。目前,它包含指向與所選依賴項相關的指南和參考文件的連結。將來,我們計劃進一步定製 HELP.md 檔案,以提供有助於您開發應用程式的後續步驟。
如果專案使用 restdocs
依賴項生成,則使用 BuildCustomizer
配置構建以應用 Asciidoctor 外掛。
對於使用 Flyway
生成的專案,現在會自動建立 src/main/resources/db/migration
目錄。為了說明使用此 API 實現這一點有多容易,這裡是該功能的貢獻者程式碼
@Bean
@ConditionalOnRequestedDependency("flyway")
public ProjectContributor flywayProjectContributor() {
return (directory) -> {
Path migrationDirectory = directory
.resolve("src/main/resources/db/migration");
Files.createDirectories(migrationDirectory);
};
}
我們對新 API 的潛力才剛剛開始探索,我們希望在帶來新功能的同時,平衡提升開發者體驗和保持非侵入性修改之間的關係。
通常,我們希望為 HELP.md 帶來更多內容,根據所選依賴項提供專門提示,更重要的是,根據您可能選擇的依賴項提供提示,以便您瞭解可能尚未了解的內容。
我們還在開發 start.spring.io 的新 Web UI,以及幫助您擴充套件應用程式的方法,敬請關注!