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;
}
}