This version is still in development and is not considered stable yet. For the latest stable version, please use Spring Modulith 1.3.0! |
Verifying Application Module Structure
We can verify whether our code arrangement adheres to the intended constraints by calling the ….verify()
method on our ApplicationModules
instance:
-
Java
-
Kotlin
ApplicationModules.of(Application.class).verify();
ApplicationModules.of(Application::class.java).verify()
The verification includes the following rules:
-
No cycles on the application module level — the dependencies between modules have to form a directed acyclic graph.
-
Efferent module access via API packages only — all references to types that reside in application module internal packages are rejected. See Advanced Application Modules for details. Dependencies into internals of Open Application Modules are allowed.
-
Explicitly allowed application module dependencies only (optional) — an application module can optionally define allowed dependencies via
@ApplicationModule(allowedDependencies = …)
. If those are configured, dependencies to other application modules are rejected. See Explicit Application Module Dependencies and Named Interfaces for details.
Spring Modulith optionally integrates with the jMolecules ArchUnit library and, if present, automatically triggers its Domain-Driven Design verification rules described here.