public void contribute()

in initializer-generator/src/main/java/com/alibaba/initializer/generation/extension/build/maven/MulitModuleMavenBuildProjectContributor.java [85:189]


    public void contribute(Path projectRoot) throws IOException {

        Architecture arch = description.getArchitecture();

        if (module.isRoot()) {
            this.build.plugins().remove("org.springframework.boot", "spring-boot-maven-plugin");
            if (module.isMain()) {
                // add spring boot plugin
                this.build.plugins().add("org.springframework.boot", "spring-boot-maven-plugin", builder -> {
                    builder.version("${spring-boot.version}");//这个要用spring version么?
                    builder.execution("repackage", execution -> execution.goal("repackage"));
                    builder.configuration(conf -> conf.add("mainClass", description.getPackageName() + "." + description.getApplicationName()).add("skip", "true"));
                });
            }

            if (arch == null || CollectionUtils.isEmpty(arch.getSubModules())) {
                super.contribute(projectRoot);
            } else {
                List<Module> modules = arch.getSubModules();

                // add submodule in root dependencymanager
                for (Module subModule : arch.getSubModules()) {
                    this.build.boms().add(toFinalArtifactId(subModule.getName()),
                            DependencyBillOfMaterials
                                    .withCoordinates(description.getGroupId(), toFinalArtifactId(subModule.getName()))
                                    .type(null)
                                    .scope(null)
                                    .version(VersionReference.ofValue(description.getVersion()))
                    );
                }

                // create new pom.xml file
                super.contribute(projectRoot);

                // insert <modules /> to pom.xml
                Path pomFile = projectRoot.resolve("pom.xml");
                try (RandomAccessFile rw = new RandomAccessFile(pomFile.toFile(), "rw")) {
                    StringBuffer rewrited = new StringBuffer();
                    //not utf-8 but ISO-8859-1 encodng
                    String rawLine;
                    int index = -1;
                    int insetIndex = findModulesInsertLine(pomFile);
                    while ((rawLine = rw.readLine()) != null) {
                        index++;

                        //trans encoding style
                        String line = new String(rawLine.getBytes("ISO-8859-1"), "UTF-8");
                        rewrited.append(line).append("\n");

                        if (index == insetIndex) {
                            StringWriter sw = new StringWriter();
                            IndentingWriter writer = indentingWriterFactory
                                    .createIndentingWriter("maven", sw);

                            writer.println();
                            writer.indented(() -> {
                                writer.println("<modules>");
                                writer.indented(() -> modules.stream()
                                        .map(name -> "<module>" + toFinalArtifactId(name.getName()) + "</module>")
                                        .forEach(writer::println));
                                writer.println("</modules>\n");
                            });

                            rewrited.append(sw);
                        }
                    }
                    rw.seek(0);
                    rw.write(rewrited.toString().getBytes());
                }
            }

        } else {
            List<String> dependModules
                    = module.getDependModules() == null ? Collections.emptyList() : module.getDependModules().stream()
                    .distinct().map(dependModule -> toFinalArtifactId(dependModule)).collect(Collectors.toUnmodifiableList());
            if (module.isMain()) {
                if (dependModules.isEmpty()) {
                    // main module depend all other submodules
                    List<String> subModules = arch.getSubModules().stream().distinct()
                            .dropWhile(subModule -> subModule == module)
                            .map(subModule -> toFinalArtifactId(subModule.getName()))
                            .collect(Collectors.toUnmodifiableList());
                    addModuleDependencies(subModules);
                } else {
                    addModuleDependencies(dependModules);
                }
            } else {
                addModuleDependencies(dependModules);
            }

            // remove all dependencymanager
            this.build.boms().ids().collect(Collectors.toList()).forEach(id -> this.build.boms().remove(id));

            // set parent
            this.build.settings().parent(description.getGroupId(), description.getArtifactId(), description.getVersion(), "../pom.xml");
            this.build.settings().name(toFinalArtifactId(module.getName()));
            this.build.settings().artifact(toFinalArtifactId(module.getName()));
            this.build.settings().group(null);
            this.build.settings().version(null);
            this.build.settings().description(module.getDescription());
            this.cleanupProperties();

            super.contribute(projectRoot);
        }
    }