spring-projects / spring-modulith

Modular applications with Spring Boot
https://spring.io/projects/spring-modulith
Apache License 2.0
715 stars 112 forks source link
architecture modularity spring-boot

= Spring Modulith image:https://img.shields.io/badge/Revved%20up%20by-Develocity-06A0CE?logo=Gradle&labelColor=02303A["Revved up by Develocity", link="https://ge.spring.io/scans?search.rootProjectNames=Spring Modulith"]

:docs: https://docs.spring.io/spring-modulith/docs/current-SNAPSHOT/reference/html/

Spring Modulith allows developers to build well-structured Spring Boot applications and guides developers in finding and working with link:{docs}#fundamentals.modules.application-modules[application modules] driven by the domain. It supports the link:{docs}#verification[verification] of such modular arrangements, link:{docs}#testing[integration testing] individual modules, link:{docs}#observability[observing] the application's behavior on the module level and creating link:{docs}#documentation[documentation snippets] based on the arrangement created.

== Quickstart

. Create a Spring Boot application on https://start.spring.io . Add Spring Modulith to your application by adding this to your pom.xml: + [source, xml]

spring-snapshots https://repo.spring.io/snapshot org.springframework.modulith spring-modulith-bom 1.0.0-SNAPSHOT import pom org.springframework.modulith spring-modulith-starter-test test

. Create a Java package arrangement that puts business modules as link:{docs}#fundamentals[direct sub-packages of the application's main package]. + [source, text, subs="macros"]

□ Example └─ □ src/main/java ├─ □ example <1> | └─ Application.java ├─ □ example.inventory <2> | └─ … └─ □ example.order <2> └─ …

<1> The application root package <2> Application module packages . Create link:{docs}#fundamentals.modules.application-modules[an `ApplicationModules` model], run link:{docs}#verification[verifications] and link:{docs}#documentation[create documentation snippets]. + [source, java] ---- class ApplicationTests { @Test void writeDocumentationSnippets() { var modules = ApplicationModules.of(Application.class).verify(); <1> new Documenter(modules) <2> .writeModulesAsPlantUml() .writeIndividualModulesAsPlantUml(); } } ---- <1> Creates application module model and link:{docs}#verification[verifies its structure]. <2> Renders link:{docs}#documentation[Asciidoctor snippets] (component diagrams, application module canvas) to `target/modulith-docs`. . Run link:{docs}#testing[integration tests] for individual application modules. + [source, text, subs="macros"] ---- □ Example └─ □ src/test/java └─ □ example.order └─ OrderModuleIntegrationTests.java ---- + [source, java] ---- @ApplicationModuleTests class OrderModuleIntegrationTests { @Test void someTestMethod() { … } } ---- == Reference documentation Find the reference documentation link:{docs}[here]. == Contributing https://help.github.com/articles/creating-a-pull-request[Pull requests] are welcome. Note, that we expect everyone to follow the https://github.com/spring-projects/.github/blob/main/CODE_OF_CONDUCT.md[code of conduct]. === What you will need * Git * Java 17 or higher * Docker version 1.6.0 or higher === Get the Source Code Clone the repository [source,bash] ---- git clone git@github.com:spring-projects/spring-modulith.git cd spring-modulith ---- === Build the code To compile, test, and build [source,bash] ---- ./mvnw -B ---- == License Spring Modulith is Open Source software released under the https://www.apache.org/licenses/LICENSE-2.0.html[Apache 2.0 license].