自定义spring-initializr的工作方式?
作为一家企业,我们希望在PCF实例内部托管Initializr,我可以这样做。我还能够将application.yml修改为默认的一些选择。
我是通过简单地创建自己的spring-boot应用程序来实现的,该应用程序使用io.spring.initializr:initializr-
web:0.3.0.RELEASE作为运行时依赖项。
我有两个主要问题:
- UI首次出现时,UI上是否有一种方法可以默认选择某些依赖项(例如,预先选择“ Web&Security”)?
- 我可以自定义世代的输出吗?例如,我们有自己的Gradle自定义发行版,并且希望生成的build.gradle文件看起来与initializr生成的文件有所不同。我们还想生成gradle.properties文件作为项目的一部分。
回答:
有一个参考指南可引导您完成自己的实例的创建。关于您的主要问题:
是的,这在自定义实例中是可能的。实现ProjectRequestPostProcessor
并将这两个依赖项添加到项目中。
@Componentclass PreselectedDependenciesRequestPostProcessor implements ProjectRequestPostProcessor {
private final InitializrMetadataProvider metadataProvider;
public PreselectedDependenciesRequestPostProcessor(
InitializrMetadataProvider metadataProvider) {
this.metadataProvider = metadataProvider;
}
@Override
public void postProcessAfterResolution(ProjectRequest request,
InitializrMetadata metadata) {
DependenciesCapability dependencies = metadataProvider.get().getDependencies();
if (!hasDependencies(request, "web")) {
request.getResolvedDependencies().add(dependencies.get("web"));
}
if (!hasDependencies(request, "security")) {
request.getResolvedDependencies().add(dependencies.get("security"));
}
}
private boolean hasDependencies(ProjectRequest request, String... dependenciesId) {
for (String id : dependenciesId) {
if (getDependency(request, id) == null) {
return false;
}
}
return true;
}
private Dependency getDependency(ProjectRequest request, String id) {
return request.getResolvedDependencies().stream()
.filter(d -> id.equals(d.getId())).findFirst().orElse(null);
}
}
它们不会在用户界面中被选中,但是它们将被集成到项目中,就像用户选择它们一样。我之所以推荐这种方法,是因为IDE集成可以以与主实例(start.spring.io)相同的方式来定位您的自定义实例。破解Web
UI只会使该特定的客户端(IMO)有问题。
对于第二个问题,大多数fork都会从中扩展ProjectGenerator
并执行所需的任何操作(包括覆盖gradle构建)。检查该类以获取更多详细信息。
Spring Initializr尚未达到1.0,因此尚未处于合同足够成熟的状态。
以上是 自定义spring-initializr的工作方式? 的全部内容, 来源链接: utcz.com/qa/432804.html