public ProjectGenerationResult invokeProjectStructureGeneration()

in initializer-generator/src/main/java/com/alibaba/initializer/generation/InitializerProjectGenerationInvoker.java [84:119]


    public ProjectGenerationResult invokeProjectStructureGeneration(ProjectRequest request) {
        InitializerMetadata metadata = (InitializerMetadata) this.parentAppCtx.getBean(InitializrMetadataProvider.class).get();
        try {
            InitializerProjectDescription description = (InitializerProjectDescription) this.requestConverter.convert(request, metadata);

            Architecture arch = description.getArchitecture();

            ProjectGenerationResult result;
            // if request multiple module project, create new context to generate submodule codes
            if (!arch.isMultipleModule()) {
                // single module
                InitializerProjectGenerator projectGenerator = new InitializerProjectGenerator((ctx) -> customizeProjectGenerationContext(ctx, metadata, new Module(true, true)));
                result = projectGenerator.generate(description, generateProject(request, null));
            } else {
                // multiple modules - root module
                InitializerProjectGenerator projectGenerator = new InitializerProjectGenerator((ctx) -> customizeProjectGenerationContext(ctx, metadata, new Module(true, false)));
                result = projectGenerator.generate(description, generateProject(request, null));

                for (Module subModule : arch.getSubModules()) {
                    // hack base dir for sub module
                    MutableProjectDescription subDescription = description.createCopy();
                    subDescription.setBaseDirectory(null);
                    // multiple modules - sub module
                    InitializerProjectGenerator subProjectGenerator = new InitializerProjectGenerator((ctx) -> customizeProjectGenerationContext(ctx, metadata, subModule));
                    subProjectGenerator.generate(subDescription,
                            generateProject(request, (desc) -> result.getRootDirectory().resolve(description.getBaseDirectory()).resolve(desc.getName() + "-" + subModule.getName())));
                }
            }

            addTempFile(result.getRootDirectory(), result.getRootDirectory());
            return result;
        } catch (ProjectGenerationException ex) {
            publishProjectFailedEvent(request, metadata, ex);
            throw ex;
        }
    }