首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >自定义spring-initializr的工作方式?

自定义spring-initializr的工作方式?
EN

Stack Overflow用户
提问于 2017-04-14 20:33:17
回答 2查看 3.6K关注 0票数 5

作为一个企业,我们希望在PCF实例上在内部托管initializr,我可以这样做。我还能够修改application.yml以默认一些选择。

我只是通过创建自己的spring引导应用程序来做到这一点,它使用io.spring.initializr:initializr-web:0.3.0.RELEASE作为运行时依赖项。

我有两个主要问题:

  1. 当UI第一次出现时,UI上是否有一种默认选择某些依赖项的方法(例如,预选Web & Security )?
  2. 我可以自定义生成的输出吗?例如,我们有自己的Gradle自定义发行版,并且希望生成的build.gradle文件看起来与initializr生成的有点不同。我们还希望生成一个gradle.properties文件作为项目的一部分。
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-05-18 08:27:06

有一个参考指南,即带领您完成创建您自己的实例。关于你的主要问题:

是的,这在自定义实例中是可能的。实现ProjectRequestPostProcessor并将这两个依赖项添加到项目中。

代码语言:javascript
复制
@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);
    }
}

它们不会在UI中被选中,但它们将以与用户选择它们相同的方式集成到项目中。我之所以推荐这种方法,是因为您的自定义实例可以以与主(start.spring.io)实例相同的方式被IDE集成所针对。黑客网络用户界面只会使这个工作与特定的客户端,这是一个问题,海事组织。

对于第二个问题,大多数分叉都是从ProjectGenerator扩展而来的,他们想做什么就做什么(包括重写gradle构建)。有关更多细节,请查看该类。

还没有达到1.0,所以它还没有处于合同已经足够成熟的状态。

票数 4
EN

Stack Overflow用户

发布于 2017-07-26 14:10:47

我已经为我们的内部使用做了很多这样的工作,并将在gr8conf明天的一次演讲中介绍这一点。

输入自定义文件和添加默认选择非常容易,并且需要一点修改java、css和html的知识。您可以获得我在这里演示的工作的源代码:https://github.com/Grails-Plugin-Consortium/initializr/tree/master

需要修改的代码很长,所以要了解我要完成的工作,最简单的方法就是将添加“默认”选择和应用配置文件的差异链接起来。

https://github.com/Grails-Plugin-Consortium/initializr/commit/feae678fdd4503c2314635cebdaabc04b4d80ace

将自定义文件添加到生成的应用程序中有点简单,只需要将这些文件添加到initializr生成器中的模板中,然后在ProjectGenerator.java中添加一个链接来复制该文件,类似于现有代码的实现方式。

代码语言:javascript
复制
protected void generateDockerFile(File dir, Map<String, Object> model){
    write(new File(dir, "Dockerfile"), "Dockerfile", model);
    write(new File(dir, "docker.sh"), "docker.sh", model);
    write(new File(dir, "docker-run.sh"), "docker-run.sh", model);
}

上面添加到ProjectGenerator中的方法将添加存储在initializr/initializr-generator/src/main/resources/templates/中的下列文件

对于世代而言,所有的繁重工作都在这个文件中存在:https://github.com/Grails-Plugin-Consortium/initializr/blob/9b302d31bb069c9c702f36ed765ad3f55debff84/initializr-generator/src/main/java/io/spring/initializr/generator/ProjectGenerator.java

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43418834

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档