作为一家企业,我们希望在PCF实例内部托管Initializr,我可以这样做。我还能够将application.yml修改为默认的一些选择。
我是通过简单地创建自己的spring-boot应用程序来实现的,该应用程序使用io.spring.initializr:initializr- web:0.3.0.RELEASE作为运行时依赖项。
我有两个主要问题:
有一个参考指南可引导您完成自己的实例的创建。关于您的主要问题:
是的,这在自定义实例中是可能的。实现ProjectRequestPostProcessor并将这两个依赖项添加到项目中。
ProjectRequestPostProcessor
@Component class 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构建)。检查该类以获取更多详细信息。
ProjectGenerator
Spring Initializr尚未达到1.0,因此尚未处于合同足够成熟的状态。