From a800e20e63074661f70166b99d704c840f92cf28 Mon Sep 17 00:00:00 2001 From: Oliver Drotbohm Date: Fri, 21 Feb 2025 23:01:42 +0100 Subject: [PATCH] GH-1063 - Documenter now creates application module metadata file. --- .../modulith/docs/Documenter.java | 31 ++++++++++++++++++- .../modulith/docs/util/BuildSystemUtils.java | 10 ++++++ 2 files changed, 40 insertions(+), 1 deletion(-) diff --git a/spring-modulith-docs/src/main/java/org/springframework/modulith/docs/Documenter.java b/spring-modulith-docs/src/main/java/org/springframework/modulith/docs/Documenter.java index b0944a89..91c72b59 100644 --- a/spring-modulith-docs/src/main/java/org/springframework/modulith/docs/Documenter.java +++ b/spring-modulith-docs/src/main/java/org/springframework/modulith/docs/Documenter.java @@ -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()); } diff --git a/spring-modulith-docs/src/main/java/org/springframework/modulith/docs/util/BuildSystemUtils.java b/spring-modulith-docs/src/main/java/org/springframework/modulith/docs/util/BuildSystemUtils.java index 636c2f06..e1110255 100644 --- a/spring-modulith-docs/src/main/java/org/springframework/modulith/docs/util/BuildSystemUtils.java +++ b/spring-modulith-docs/src/main/java/org/springframework/modulith/docs/util/BuildSystemUtils.java @@ -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"; }