GH-1063 - Documenter now creates application module metadata file.

This commit is contained in:
Oliver Drotbohm
2025-02-21 23:01:42 +01:00
parent a9365ed257
commit a800e20e63
2 changed files with 40 additions and 1 deletions

View File

@@ -20,10 +20,12 @@ import static org.springframework.modulith.docs.Asciidoctor.*;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.UncheckedIOException;
import java.lang.annotation.Annotation;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardOpenOption;
import java.util.*;
import java.util.Map.Entry;
import java.util.function.BiConsumer;
@@ -40,8 +42,10 @@ import org.springframework.modulith.core.ApplicationModules;
import org.springframework.modulith.core.DependencyDepth;
import org.springframework.modulith.core.DependencyType;
import org.springframework.modulith.core.SpringBean;
import org.springframework.modulith.core.util.ApplicationModulesExporter;
import org.springframework.modulith.docs.Groupings.JMoleculesGroupings;
import org.springframework.modulith.docs.Groupings.SpringGroupings;
import org.springframework.modulith.docs.util.BuildSystemUtils;
import org.springframework.util.Assert;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
@@ -195,7 +199,8 @@ public class Documenter {
return writeModulesAsPlantUml(diagramOptions)
.writeIndividualModulesAsPlantUml(diagramOptions)
.writeModuleCanvases(canvasOptions)
.writeAggregatingDocument(diagramOptions, canvasOptions);
.writeAggregatingDocument(diagramOptions, canvasOptions)
.writeModuleMetadata();
}
/**
@@ -390,6 +395,30 @@ public class Documenter {
return this;
}
/**
* Writes application module metadata to the build folder for inclusion at runtime.
*
* @return will never be {@literal null}.
* @see ApplicationModulesExporter
* @since 1.4
*/
public Documenter writeModuleMetadata() {
var content = new ApplicationModulesExporter(modules).toFullJson();
var path = Path.of(BuildSystemUtils.getResourceTarget(), ApplicationModulesExporter.DEFAULT_LOCATION);
try {
Files.createDirectories(path.getParent());
Files.writeString(path, content, StandardOpenOption.CREATE);
} catch (IOException o_O) {
throw new UncheckedIOException(o_O);
}
return this;
}
String toModuleCanvas(ApplicationModule module) {
return toModuleCanvas(module, CanvasOptions.defaults());
}

View File

@@ -62,6 +62,16 @@ public class BuildSystemUtils {
return isMaven() ? "target/test-classes" : "build/classes/java/test";
}
/**
* Returns the path to the target folder for resources.
*
* @return will never be {@literal null}.
* @since 1.4
*/
public static String getResourceTarget() {
return isMaven() ? "target/classes" : "build/resources/main";
}
private static String getTargetFolder() {
return isMaven() ? "target" : "build";
}