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