Skip to content

Commit a800e20

Browse files
committed
GH-1063 - Documenter now creates application module metadata file.
1 parent a9365ed commit a800e20

File tree

2 files changed

+40
-1
lines changed

2 files changed

+40
-1
lines changed

spring-modulith-docs/src/main/java/org/springframework/modulith/docs/Documenter.java

+30-1
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,12 @@
2020
import java.io.File;
2121
import java.io.FileWriter;
2222
import java.io.IOException;
23+
import java.io.UncheckedIOException;
2324
import java.lang.annotation.Annotation;
2425
import java.nio.file.Files;
2526
import java.nio.file.Path;
2627
import java.nio.file.Paths;
28+
import java.nio.file.StandardOpenOption;
2729
import java.util.*;
2830
import java.util.Map.Entry;
2931
import java.util.function.BiConsumer;
@@ -40,8 +42,10 @@
4042
import org.springframework.modulith.core.DependencyDepth;
4143
import org.springframework.modulith.core.DependencyType;
4244
import org.springframework.modulith.core.SpringBean;
45+
import org.springframework.modulith.core.util.ApplicationModulesExporter;
4346
import org.springframework.modulith.docs.Groupings.JMoleculesGroupings;
4447
import org.springframework.modulith.docs.Groupings.SpringGroupings;
48+
import org.springframework.modulith.docs.util.BuildSystemUtils;
4549
import org.springframework.util.Assert;
4650
import org.springframework.util.LinkedMultiValueMap;
4751
import org.springframework.util.MultiValueMap;
@@ -195,7 +199,8 @@ public Documenter writeDocumentation(DiagramOptions diagramOptions, CanvasOption
195199
return writeModulesAsPlantUml(diagramOptions)
196200
.writeIndividualModulesAsPlantUml(diagramOptions)
197201
.writeModuleCanvases(canvasOptions)
198-
.writeAggregatingDocument(diagramOptions, canvasOptions);
202+
.writeAggregatingDocument(diagramOptions, canvasOptions)
203+
.writeModuleMetadata();
199204
}
200205

201206
/**
@@ -390,6 +395,30 @@ public Documenter writeModuleCanvases(CanvasOptions canvasOptions) {
390395
return this;
391396
}
392397

398+
/**
399+
* Writes application module metadata to the build folder for inclusion at runtime.
400+
*
401+
* @return will never be {@literal null}.
402+
* @see ApplicationModulesExporter
403+
* @since 1.4
404+
*/
405+
public Documenter writeModuleMetadata() {
406+
407+
var content = new ApplicationModulesExporter(modules).toFullJson();
408+
var path = Path.of(BuildSystemUtils.getResourceTarget(), ApplicationModulesExporter.DEFAULT_LOCATION);
409+
410+
try {
411+
412+
Files.createDirectories(path.getParent());
413+
Files.writeString(path, content, StandardOpenOption.CREATE);
414+
415+
} catch (IOException o_O) {
416+
throw new UncheckedIOException(o_O);
417+
}
418+
419+
return this;
420+
}
421+
393422
String toModuleCanvas(ApplicationModule module) {
394423
return toModuleCanvas(module, CanvasOptions.defaults());
395424
}

spring-modulith-docs/src/main/java/org/springframework/modulith/docs/util/BuildSystemUtils.java

+10
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,16 @@ public static String getTestTarget() {
6262
return isMaven() ? "target/test-classes" : "build/classes/java/test";
6363
}
6464

65+
/**
66+
* Returns the path to the target folder for resources.
67+
*
68+
* @return will never be {@literal null}.
69+
* @since 1.4
70+
*/
71+
public static String getResourceTarget() {
72+
return isMaven() ? "target/classes" : "build/resources/main";
73+
}
74+
6575
private static String getTargetFolder() {
6676
return isMaven() ? "target" : "build";
6777
}

0 commit comments

Comments
 (0)