Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/spring-projects/spring-modulith

Modular applications with Spring Boot
https://github.com/spring-projects/spring-modulith

architecture modularity spring-boot

Last synced: 3 days ago
JSON representation

Modular applications with Spring Boot

Awesome Lists containing this project

README

        

= 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]
----



org.springframework.modulith
spring-modulith-bom
1.3.1
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 [email protected]: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].