领先一步
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 以及帮助您扩展应用程序的方法,敬请期待!