|
20 | 20 | import java.io.File;
|
21 | 21 | import java.io.FileWriter;
|
22 | 22 | import java.io.IOException;
|
| 23 | +import java.io.UncheckedIOException; |
23 | 24 | import java.lang.annotation.Annotation;
|
24 | 25 | import java.nio.file.Files;
|
25 | 26 | import java.nio.file.Path;
|
26 | 27 | import java.nio.file.Paths;
|
| 28 | +import java.nio.file.StandardOpenOption; |
27 | 29 | import java.util.*;
|
28 | 30 | import java.util.Map.Entry;
|
29 | 31 | import java.util.function.BiConsumer;
|
|
40 | 42 | import org.springframework.modulith.core.DependencyDepth;
|
41 | 43 | import org.springframework.modulith.core.DependencyType;
|
42 | 44 | import org.springframework.modulith.core.SpringBean;
|
| 45 | +import org.springframework.modulith.core.util.ApplicationModulesExporter; |
43 | 46 | import org.springframework.modulith.docs.Groupings.JMoleculesGroupings;
|
44 | 47 | import org.springframework.modulith.docs.Groupings.SpringGroupings;
|
| 48 | +import org.springframework.modulith.docs.util.BuildSystemUtils; |
45 | 49 | import org.springframework.util.Assert;
|
46 | 50 | import org.springframework.util.LinkedMultiValueMap;
|
47 | 51 | import org.springframework.util.MultiValueMap;
|
@@ -195,7 +199,8 @@ public Documenter writeDocumentation(DiagramOptions diagramOptions, CanvasOption
|
195 | 199 | return writeModulesAsPlantUml(diagramOptions)
|
196 | 200 | .writeIndividualModulesAsPlantUml(diagramOptions)
|
197 | 201 | .writeModuleCanvases(canvasOptions)
|
198 |
| - .writeAggregatingDocument(diagramOptions, canvasOptions); |
| 202 | + .writeAggregatingDocument(diagramOptions, canvasOptions) |
| 203 | + .writeModuleMetadata(); |
199 | 204 | }
|
200 | 205 |
|
201 | 206 | /**
|
@@ -390,6 +395,30 @@ public Documenter writeModuleCanvases(CanvasOptions canvasOptions) {
|
390 | 395 | return this;
|
391 | 396 | }
|
392 | 397 |
|
| 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 | + |
393 | 422 | String toModuleCanvas(ApplicationModule module) {
|
394 | 423 | return toModuleCanvas(module, CanvasOptions.defaults());
|
395 | 424 | }
|
|
0 commit comments