├── .git-authors
├── .github
├── dco.yml
└── workflows
│ ├── build-prs.yaml
│ ├── build.yaml
│ ├── deploy-docs.yml
│ ├── integration.yaml
│ ├── milestone.yaml
│ └── release.yaml
├── .gitignore
├── .mvn
├── extensions.xml
├── jvm.config
└── wrapper
│ └── maven-wrapper.properties
├── CONTRIBUTING.adoc
├── LICENSE
├── application.yml
├── etc
├── backport-ticket.sh
├── build-and-releases.adoc
├── copy-ticket.sh
├── functions.sh
├── ide
│ ├── README.md
│ ├── eclipse-formatting.xml
│ └── intellij.importorder
├── introducing-spring-modulith.adoc
├── mappings.txt
└── test
│ ├── includes
│ ├── copy-repo.sh
│ └── create-issues-commits-milestones.sh
│ └── setup-test-env.sh
├── lombok.config
├── mvnw
├── mvnw.cmd
├── pom.xml
├── readme.adoc
├── settings.xml
├── spring-modulith-actuator
├── pom.xml
└── src
│ ├── main
│ ├── java
│ │ └── org
│ │ │ └── springframework
│ │ │ └── modulith
│ │ │ └── actuator
│ │ │ ├── ApplicationModulesEndpoint.java
│ │ │ ├── autoconfigure
│ │ │ ├── ApplicationModulesEndpointConfiguration.java
│ │ │ └── package-info.java
│ │ │ └── package-info.java
│ └── resources
│ │ └── META-INF
│ │ ├── LICENSE
│ │ ├── NOTICE
│ │ └── spring
│ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports
│ └── test
│ ├── java
│ ├── example
│ │ ├── App.java
│ │ ├── a
│ │ │ └── ComponentA.java
│ │ └── b
│ │ │ └── ComponentB.java
│ └── org
│ │ └── springframework
│ │ └── modulith
│ │ └── actuator
│ │ ├── ApplicationModulesEndpointIntegrationTests.java
│ │ └── autoconfigure
│ │ └── ApplicationModulesEndpointConfigurationIntegrationTests.java
│ └── resources
│ └── logback.xml
├── spring-modulith-api
├── pom.xml
└── src
│ └── main
│ ├── java
│ └── org
│ │ └── springframework
│ │ └── modulith
│ │ ├── ApplicationModule.java
│ │ ├── ApplicationModuleInitializer.java
│ │ ├── ApplicationModuleListener.java
│ │ ├── Modulith.java
│ │ ├── Modulithic.java
│ │ ├── NamedInterface.java
│ │ ├── PackageInfo.java
│ │ └── package-info.java
│ └── resources
│ └── META-INF
│ ├── LICENSE
│ └── NOTICE
├── spring-modulith-apt
├── pom.xml
└── src
│ ├── main
│ ├── java
│ │ └── org
│ │ │ └── springframework
│ │ │ └── modulith
│ │ │ └── apt
│ │ │ ├── SpringModulithProcessor.java
│ │ │ └── package-info.java
│ └── resources
│ │ └── META-INF
│ │ ├── LICENSE
│ │ ├── NOTICE
│ │ └── services
│ │ └── javax.annotation.processing.Processor
│ └── test
│ ├── java
│ └── org
│ │ └── springframework
│ │ └── modulith
│ │ └── apt
│ │ └── SpringModulithProcessorUnitTests.java
│ └── resources
│ └── example
│ ├── SampleComponent.java
│ └── SampleInterface.java
├── spring-modulith-benchmarks
├── pom.xml
└── src
│ └── test
│ └── java
│ └── org
│ └── springframework
│ └── modulith
│ └── events
│ └── core
│ └── PublicationsInProgressBenchmarks.java
├── spring-modulith-bom
└── pom.xml
├── spring-modulith-core
├── pom.xml
└── src
│ ├── main
│ ├── java
│ │ └── org
│ │ │ └── springframework
│ │ │ └── modulith
│ │ │ └── core
│ │ │ ├── AnnotationModulithMetadata.java
│ │ │ ├── ApplicationModule.java
│ │ │ ├── ApplicationModuleDependencies.java
│ │ │ ├── ApplicationModuleDependency.java
│ │ │ ├── ApplicationModuleDetectionStrategy.java
│ │ │ ├── ApplicationModuleDetectionStrategyLookup.java
│ │ │ ├── ApplicationModuleIdentifier.java
│ │ │ ├── ApplicationModuleIdentifiers.java
│ │ │ ├── ApplicationModuleInformation.java
│ │ │ ├── ApplicationModuleInformationFactory.java
│ │ │ ├── ApplicationModuleSource.java
│ │ │ ├── ApplicationModuleSourceContributions.java
│ │ │ ├── ApplicationModuleSourceFactory.java
│ │ │ ├── ApplicationModules.java
│ │ │ ├── ApplicationModulesFactory.java
│ │ │ ├── ArchitecturallyEvidentType.java
│ │ │ ├── Classes.java
│ │ │ ├── DependencyDepth.java
│ │ │ ├── DependencyType.java
│ │ │ ├── EventType.java
│ │ │ ├── FormattableType.java
│ │ │ ├── JavaAccessSource.java
│ │ │ ├── JavaPackage.java
│ │ │ ├── JavaPackages.java
│ │ │ ├── ModulithMetadata.java
│ │ │ ├── NamedInterface.java
│ │ │ ├── NamedInterfaces.java
│ │ │ ├── PackageName.java
│ │ │ ├── Source.java
│ │ │ ├── SpringBean.java
│ │ │ ├── SpringBootModulithMetadata.java
│ │ │ ├── SyntacticSugar.java
│ │ │ ├── Types.java
│ │ │ ├── VerificationOptions.java
│ │ │ ├── Violation.java
│ │ │ ├── Violations.java
│ │ │ ├── config
│ │ │ ├── ApplicationModuleInitializerRuntimeVerification.java
│ │ │ └── package-info.java
│ │ │ ├── package-info.java
│ │ │ └── util
│ │ │ ├── ApplicationModulesExporter.java
│ │ │ ├── CheckReturnValue.java
│ │ │ ├── Json.java
│ │ │ └── package-info.java
│ └── resources
│ │ └── META-INF
│ │ ├── LICENSE
│ │ ├── NOTICE
│ │ ├── spring-configuration-metadata.json
│ │ └── spring
│ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports
│ └── test
│ ├── java
│ ├── com
│ │ └── acme
│ │ │ └── withatbean
│ │ │ ├── SampleAggregate.java
│ │ │ ├── SampleConfiguration.java
│ │ │ └── TestEvents.java
│ ├── contributed
│ │ ├── ApplicationModuleSourceContribution.java
│ │ ├── detected
│ │ │ └── package-info.java
│ │ └── enumerated
│ │ │ └── package-info.java
│ ├── empty
│ │ └── EmptyApplication.java
│ ├── example
│ │ ├── Example.java
│ │ ├── invalid
│ │ │ └── Invalid.java
│ │ ├── jmolecules
│ │ │ └── package-info.java
│ │ ├── metani
│ │ │ ├── Exposed.java
│ │ │ └── ModuleApi.java
│ │ ├── ni
│ │ │ ├── AnnotatedNamedInterfaceType.java
│ │ │ ├── RootType.java
│ │ │ ├── api
│ │ │ │ ├── ApiType.java
│ │ │ │ └── package-info.java
│ │ │ ├── internal
│ │ │ │ ├── AdditionalSpiType.java
│ │ │ │ ├── DefaultedNamedInterfaceType.java
│ │ │ │ └── Internal.java
│ │ │ ├── nested
│ │ │ │ ├── InNested.java
│ │ │ │ ├── a
│ │ │ │ │ └── InNestedA.java
│ │ │ │ ├── b
│ │ │ │ │ ├── InNestedB.java
│ │ │ │ │ ├── first
│ │ │ │ │ │ ├── InNestedBFirst.java
│ │ │ │ │ │ └── package-info.java
│ │ │ │ │ └── second
│ │ │ │ │ │ ├── InNestedBSecond.java
│ │ │ │ │ │ └── package-info.java
│ │ │ │ └── package-info.java
│ │ │ ├── ontype
│ │ │ │ ├── Exposed.java
│ │ │ │ └── Marker.java
│ │ │ └── spi
│ │ │ │ ├── SpiType.java
│ │ │ │ └── package-info.java
│ │ ├── ninvalid
│ │ │ └── InvalidDefaultNamedInterface.java
│ │ └── springbean
│ │ │ └── internal
│ │ │ ├── ServiceImplementation.java
│ │ │ └── ServiceInterface.java
│ ├── org
│ │ └── springframework
│ │ │ └── modulith
│ │ │ └── core
│ │ │ ├── AnnotationModulithMetadataUnitTest.java
│ │ │ ├── ApplicationModuleDetectionStrategyLookupTests.java
│ │ │ ├── ApplicationModuleInformationUnitTests.java
│ │ │ ├── ApplicationModuleSourceContributionsUnitTests.java
│ │ │ ├── ApplicationModuleSourceUnitTests.java
│ │ │ ├── ApplicationModulesUnitTests.java
│ │ │ ├── ArchitecturallyEvidentTypeUnitTest.java
│ │ │ ├── ClassesUnitTests.java
│ │ │ ├── CustomApplicationModuleDetectionStrategy.java
│ │ │ ├── JavaPackageUnitTests.java
│ │ │ ├── ModuleDependencyUnitTest.java
│ │ │ ├── ModuleDetectionStrategyUnitTest.java
│ │ │ ├── ModuleUnitTest.java
│ │ │ ├── ModulithMetadataUnitTest.java
│ │ │ ├── NamedInterfacesUnitTests.java
│ │ │ ├── PackageNameUnitTests.java
│ │ │ ├── SpringBeanUnitTests.java
│ │ │ ├── SpringBootModulithMetadataUnitTest.java
│ │ │ ├── TestUtils.java
│ │ │ ├── VerificationOptionsUnitTests.java
│ │ │ ├── ViolationsUnitTests.java
│ │ │ └── config
│ │ │ └── ApplicationModuleInitializerRuntimeVerificationTests.java
│ ├── reproducers
│ │ ├── gh1042
│ │ │ └── module
│ │ │ │ └── nested
│ │ │ │ └── package-info.java
│ │ ├── gh1052
│ │ │ └── Marker.java
│ │ ├── gh650
│ │ │ ├── Gh650Tests.java
│ │ │ └── first
│ │ │ │ └── persistence
│ │ │ │ ├── SomeRepository.java
│ │ │ │ ├── dto
│ │ │ │ ├── SomeDto.java
│ │ │ │ └── package-info.java
│ │ │ │ └── package-info.java
│ │ ├── gh660
│ │ │ ├── first
│ │ │ │ ├── Gh660Tests.java
│ │ │ │ ├── package-info.java
│ │ │ │ └── repository
│ │ │ │ │ ├── Product.java
│ │ │ │ │ ├── ProductRepository.java
│ │ │ │ │ └── package-info.java
│ │ │ └── second
│ │ │ │ └── ExtendingRepository.java
│ │ └── gh764
│ │ │ └── Entry.java
│ └── with
│ │ └── many
│ │ └── intermediate
│ │ └── packages
│ │ └── Marker.java
│ └── resources
│ ├── application.properties
│ ├── detection
│ ├── custom-type.properties
│ ├── direct-sub-packages.properties
│ └── explicitly-annotated.properties
│ └── logback.xml
├── spring-modulith-distribution
└── pom.xml
├── spring-modulith-docs
├── pom.xml
└── src
│ ├── main
│ ├── java
│ │ └── org
│ │ │ └── springframework
│ │ │ └── modulith
│ │ │ └── docs
│ │ │ ├── Asciidoctor.java
│ │ │ ├── CodeReplacingDocumentationSource.java
│ │ │ ├── ConfigurationProperties.java
│ │ │ ├── DocumentationSource.java
│ │ │ ├── Documenter.java
│ │ │ ├── Groupings.java
│ │ │ ├── SpringModulithDocumentationSource.java
│ │ │ ├── metadata
│ │ │ ├── MethodMetadata.java
│ │ │ ├── TypeMetadata.java
│ │ │ └── package-info.java
│ │ │ ├── package-info.java
│ │ │ └── util
│ │ │ ├── BuildSystemUtils.java
│ │ │ └── package-info.java
│ └── resources
│ │ └── META-INF
│ │ ├── LICENSE
│ │ └── NOTICE
│ └── test
│ ├── java
│ └── org
│ │ └── springframework
│ │ └── modulith
│ │ └── docs
│ │ └── AsciidoctorUnitTests.java
│ └── resources
│ ├── META-INF
│ └── spring-configuration-metadata.json
│ └── logback.xml
├── spring-modulith-events
├── pom.xml
├── readme.adoc
├── spring-modulith-events-amqp
│ ├── pom.xml
│ └── src
│ │ ├── main
│ │ ├── java
│ │ │ └── org
│ │ │ │ └── springframework
│ │ │ │ └── modulith
│ │ │ │ └── events
│ │ │ │ └── amqp
│ │ │ │ ├── RabbitEventExternalizerConfiguration.java
│ │ │ │ ├── RabbitJacksonConfiguration.java
│ │ │ │ └── package-info.java
│ │ └── resources
│ │ │ └── META-INF
│ │ │ ├── LICENSE
│ │ │ ├── NOTICE
│ │ │ ├── spring-configuration-metadata.json
│ │ │ └── spring
│ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports
│ │ └── test
│ │ ├── java
│ │ └── org
│ │ │ └── springframework
│ │ │ └── modulith
│ │ │ └── events
│ │ │ └── amqp
│ │ │ ├── RabbitEventExternalizerConfigurationIntegrationTests.java
│ │ │ └── RabbitEventPublicationIntegrationTests.java
│ │ └── resources
│ │ ├── application.properties
│ │ └── logback.xml
├── spring-modulith-events-api
│ ├── pom.xml
│ └── src
│ │ ├── main
│ │ ├── java
│ │ │ └── org
│ │ │ │ └── springframework
│ │ │ │ └── modulith
│ │ │ │ └── events
│ │ │ │ ├── AnnotationTargetLookup.java
│ │ │ │ ├── ApplicationModuleListener.java
│ │ │ │ ├── CompletedEventPublications.java
│ │ │ │ ├── DefaultEventExternalizationConfiguration.java
│ │ │ │ ├── EventExternalizationConfiguration.java
│ │ │ │ ├── EventExternalized.java
│ │ │ │ ├── EventPublication.java
│ │ │ │ ├── Externalized.java
│ │ │ │ ├── IncompleteEventPublications.java
│ │ │ │ ├── RoutingTarget.java
│ │ │ │ └── package-info.java
│ │ └── resources
│ │ │ └── META-INF
│ │ │ ├── LICENSE
│ │ │ └── NOTICE
│ │ └── test
│ │ ├── java
│ │ └── org
│ │ │ └── springframework
│ │ │ └── modulith
│ │ │ └── events
│ │ │ ├── AnnotationTargetLookupUnitTests.java
│ │ │ ├── ApplicationModuleListenerUnitTests.java
│ │ │ ├── EventExternalizationConfigurationUnitTests.java
│ │ │ └── RoutingTargetUnitTests.java
│ │ └── resources
│ │ └── logback.xml
├── spring-modulith-events-core
│ ├── pom.xml
│ └── src
│ │ ├── main
│ │ ├── java
│ │ │ └── org
│ │ │ │ └── springframework
│ │ │ │ └── modulith
│ │ │ │ └── events
│ │ │ │ ├── aot
│ │ │ │ ├── ApplicationListenerMethodAdapterRuntimeHints.java
│ │ │ │ ├── TransactionalEventListenerAotProcessor.java
│ │ │ │ └── package-info.java
│ │ │ │ ├── config
│ │ │ │ ├── EnablePersistentDomainEvents.java
│ │ │ │ ├── EventExternalizationAutoConfiguration.java
│ │ │ │ ├── EventPublicationAutoConfiguration.java
│ │ │ │ ├── EventPublicationConfiguration.java
│ │ │ │ ├── EventPublicationConfigurationExtension.java
│ │ │ │ ├── EventSerializationConfigurationExtension.java
│ │ │ │ └── package-info.java
│ │ │ │ ├── core
│ │ │ │ ├── Completable.java
│ │ │ │ ├── ConditionalEventListener.java
│ │ │ │ ├── DefaultEventPublication.java
│ │ │ │ ├── DefaultEventPublicationRegistry.java
│ │ │ │ ├── EventPublicationRegistry.java
│ │ │ │ ├── EventPublicationRepository.java
│ │ │ │ ├── EventSerializer.java
│ │ │ │ ├── PublicationTargetIdentifier.java
│ │ │ │ ├── TargetEventPublication.java
│ │ │ │ └── package-info.java
│ │ │ │ └── support
│ │ │ │ ├── BrokerRouting.java
│ │ │ │ ├── CompletionMode.java
│ │ │ │ ├── CompletionRegisteringAdvisor.java
│ │ │ │ ├── DelegatingEventExternalizer.java
│ │ │ │ ├── EventExternalizationSupport.java
│ │ │ │ ├── PersistentApplicationEventMulticaster.java
│ │ │ │ └── package-info.java
│ │ └── resources
│ │ │ └── META-INF
│ │ │ ├── LICENSE
│ │ │ ├── NOTICE
│ │ │ ├── spring-configuration-metadata.json
│ │ │ └── spring
│ │ │ ├── aot.factories
│ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports
│ │ └── test
│ │ ├── java
│ │ └── org
│ │ │ └── springframework
│ │ │ └── modulith
│ │ │ └── events
│ │ │ ├── aot
│ │ │ ├── ApplicationListenerMethodAdapterRuntimeHintsUnitTests.java
│ │ │ └── TransactionalEventListenerAotProcessorIntegrationTests.java
│ │ │ ├── config
│ │ │ └── EventPublicationAutoConfigurationIntegrationTests.java
│ │ │ ├── core
│ │ │ ├── DefaultEventPublicationRegistryUnitTests.java
│ │ │ ├── InMemoryEventPublicationRepository.java
│ │ │ └── TargetEventPublicationUnitTests.java
│ │ │ └── support
│ │ │ ├── BrokerRoutingUnitTests.java
│ │ │ ├── CompletionRegisteringAdvisorIntegrationTests.java
│ │ │ ├── CompletionRegisteringAdvisorUnitTests.java
│ │ │ ├── DelegatingEventExternalizerUnitTests.java
│ │ │ ├── PersistentApplicationEventMulticasterIntegrationTests.java
│ │ │ └── PersistentApplicationEventMulticasterUnitTests.java
│ │ └── resources
│ │ └── logback.xml
├── spring-modulith-events-jackson
│ ├── pom.xml
│ └── src
│ │ └── main
│ │ ├── java
│ │ └── org
│ │ │ └── springframework
│ │ │ └── modulith
│ │ │ └── events
│ │ │ └── jackson
│ │ │ ├── JacksonEventSerializationConfiguration.java
│ │ │ ├── JacksonEventSerializer.java
│ │ │ └── package-info.java
│ │ └── resources
│ │ └── META-INF
│ │ ├── LICENSE
│ │ ├── NOTICE
│ │ ├── spring.factories
│ │ └── spring
│ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports
├── spring-modulith-events-jdbc
│ ├── pom.xml
│ └── src
│ │ ├── main
│ │ ├── java
│ │ │ └── org
│ │ │ │ └── springframework
│ │ │ │ └── modulith
│ │ │ │ └── events
│ │ │ │ └── jdbc
│ │ │ │ ├── DatabaseSchemaInitializer.java
│ │ │ │ ├── DatabaseSchemaLocator.java
│ │ │ │ ├── DatabaseType.java
│ │ │ │ ├── JdbcConfigurationProperties.java
│ │ │ │ ├── JdbcEventPublicationAutoConfiguration.java
│ │ │ │ ├── JdbcEventPublicationRepository.java
│ │ │ │ ├── JdbcRepositorySettings.java
│ │ │ │ └── package-info.java
│ │ └── resources
│ │ │ ├── META-INF
│ │ │ ├── LICENSE
│ │ │ ├── NOTICE
│ │ │ └── spring
│ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports
│ │ │ ├── schema-h2-archive.sql
│ │ │ ├── schema-h2.sql
│ │ │ ├── schema-hsqldb-archive.sql
│ │ │ ├── schema-hsqldb.sql
│ │ │ ├── schema-mariadb-archive.sql
│ │ │ ├── schema-mariadb.sql
│ │ │ ├── schema-mysql-archive.sql
│ │ │ ├── schema-mysql.sql
│ │ │ ├── schema-oracle-archive.sql
│ │ │ ├── schema-oracle.sql
│ │ │ ├── schema-postgresql-archive.sql
│ │ │ ├── schema-postgresql.sql
│ │ │ ├── schema-sqlserver-archive.sql
│ │ │ └── schema-sqlserver.sql
│ │ └── test
│ │ ├── java
│ │ └── org
│ │ │ └── springframework
│ │ │ └── modulith
│ │ │ ├── events
│ │ │ └── jdbc
│ │ │ │ ├── DatabaseSchemaInitializerIntegrationTests.java
│ │ │ │ ├── DatabaseSchemaInitializerUnitTests.java
│ │ │ │ ├── DatabaseSchemaLocatorUnitTests.java
│ │ │ │ ├── DatabaseTypeUnitTests.java
│ │ │ │ ├── JdbcEventPublicationAutoConfigurationIntegrationTests.java
│ │ │ │ ├── JdbcEventPublicationRepositoryIntegrationTests.java
│ │ │ │ └── JdbcEventPublicationRepositoryPerformance.java
│ │ │ └── testapp
│ │ │ └── TestApplication.java
│ │ └── resources
│ │ ├── application-h2.properties
│ │ ├── application-hsqldb.properties
│ │ ├── application-mariadb.properties
│ │ ├── application-mssql.properties
│ │ ├── application-mysql.properties
│ │ ├── application-oracle.properties
│ │ ├── application-postgres.properties
│ │ ├── application.properties
│ │ ├── container-license-acceptance.txt
│ │ └── logback.xml
├── spring-modulith-events-jms
│ ├── pom.xml
│ └── src
│ │ ├── main
│ │ ├── java
│ │ │ └── org
│ │ │ │ └── springframework
│ │ │ │ └── modulith
│ │ │ │ └── events
│ │ │ │ └── jms
│ │ │ │ ├── JmsEventExternalizerConfiguration.java
│ │ │ │ └── package-info.java
│ │ └── resources
│ │ │ └── META-INF
│ │ │ ├── LICENSE
│ │ │ ├── NOTICE
│ │ │ └── spring
│ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports
│ │ └── test
│ │ ├── java
│ │ └── org
│ │ │ └── springframework
│ │ │ └── modulith
│ │ │ └── events
│ │ │ └── jms
│ │ │ ├── JmsEventExternalizerConfigurationIntegrationTests.java
│ │ │ └── JmsEventPublicationIntegrationTests.java
│ │ └── resources
│ │ ├── application.properties
│ │ └── logback.xml
├── spring-modulith-events-jpa
│ ├── pom.xml
│ └── src
│ │ ├── main
│ │ ├── java
│ │ │ └── org
│ │ │ │ └── springframework
│ │ │ │ └── modulith
│ │ │ │ └── events
│ │ │ │ └── jpa
│ │ │ │ ├── JpaEventPublication.java
│ │ │ │ ├── JpaEventPublicationAutoConfiguration.java
│ │ │ │ ├── JpaEventPublicationConfiguration.java
│ │ │ │ ├── JpaEventPublicationRepository.java
│ │ │ │ ├── archiving
│ │ │ │ ├── ArchivedJpaEventPublication.java
│ │ │ │ ├── ArchivingAutoConfiguration.java
│ │ │ │ └── package-info.java
│ │ │ │ ├── package-info.java
│ │ │ │ └── updating
│ │ │ │ ├── DefaultJpaEventPublication.java
│ │ │ │ └── package-info.java
│ │ └── resources
│ │ │ └── META-INF
│ │ │ ├── LICENSE
│ │ │ ├── NOTICE
│ │ │ ├── spring-devtools.properties
│ │ │ ├── spring.factories
│ │ │ └── spring
│ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports
│ │ └── test
│ │ ├── java
│ │ ├── example
│ │ │ └── ExampleApplication.java
│ │ └── org
│ │ │ └── springframework
│ │ │ └── modulith
│ │ │ └── events
│ │ │ └── jpa
│ │ │ ├── JpaEventPublicationAutoConfigurationIntegrationTests.java
│ │ │ ├── JpaEventPublicationConfigurationIntegrationTests.java
│ │ │ └── JpaEventPublicationRepositoryIntegrationTests.java
│ │ └── resources
│ │ └── logback.xml
├── spring-modulith-events-kafka
│ ├── pom.xml
│ └── src
│ │ ├── main
│ │ ├── java
│ │ │ └── org
│ │ │ │ └── springframework
│ │ │ │ └── modulith
│ │ │ │ └── events
│ │ │ │ └── kafka
│ │ │ │ ├── KafkaEventExternalizerConfiguration.java
│ │ │ │ ├── KafkaJacksonConfiguration.java
│ │ │ │ └── package-info.java
│ │ └── resources
│ │ │ ├── META-INF
│ │ │ ├── LICENSE
│ │ │ ├── NOTICE
│ │ │ ├── spring-configuration-metadata.json
│ │ │ └── spring
│ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports
│ │ │ └── kafka-json.properties
│ │ └── test
│ │ └── java
│ │ └── org
│ │ └── springframework
│ │ └── modulith
│ │ └── events
│ │ └── kafka
│ │ └── KafkaEventExternalizerConfigurationIntegrationTests.java
├── spring-modulith-events-messaging
│ ├── pom.xml
│ └── src
│ │ ├── main
│ │ ├── java
│ │ │ └── org
│ │ │ │ └── springframework
│ │ │ │ └── modulith
│ │ │ │ └── events
│ │ │ │ └── messaging
│ │ │ │ ├── SpringMessagingEventExternalizerConfiguration.java
│ │ │ │ └── package-info.java
│ │ └── resources
│ │ │ └── META-INF
│ │ │ ├── LICENSE
│ │ │ ├── NOTICE
│ │ │ └── spring
│ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports
│ │ └── test
│ │ ├── java
│ │ └── org
│ │ │ └── springframework
│ │ │ └── modulith
│ │ │ └── events
│ │ │ └── messaging
│ │ │ └── SpringMessagingEventPublicationIntegrationTests.java
│ │ └── resources
│ │ ├── application.properties
│ │ └── logback.xml
├── spring-modulith-events-mongodb
│ ├── pom.xml
│ └── src
│ │ ├── main
│ │ ├── java
│ │ │ └── org
│ │ │ │ └── springframework
│ │ │ │ └── modulith
│ │ │ │ └── events
│ │ │ │ └── mongodb
│ │ │ │ ├── MongoDbEventPublication.java
│ │ │ │ ├── MongoDbEventPublicationAutoConfiguration.java
│ │ │ │ ├── MongoDbEventPublicationRepository.java
│ │ │ │ ├── MongoDbTransactionAutoConfiguration.java
│ │ │ │ └── package-info.java
│ │ └── resources
│ │ │ └── META-INF
│ │ │ ├── LICENSE
│ │ │ ├── NOTICE
│ │ │ ├── spring-configuration-metadata.json
│ │ │ └── spring
│ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports
│ │ └── test
│ │ ├── java
│ │ └── org
│ │ │ └── springframework
│ │ │ └── modulith
│ │ │ ├── events
│ │ │ └── mongodb
│ │ │ │ ├── MongoDbEventPublicationAutoConfigurationIntegrationTests.java
│ │ │ │ └── MongoDbEventPublicationRepositoryTest.java
│ │ │ └── testapp
│ │ │ └── TestApplication.java
│ │ └── resources
│ │ └── application.properties
├── spring-modulith-events-neo4j
│ ├── pom.xml
│ └── src
│ │ ├── main
│ │ ├── java
│ │ │ └── org
│ │ │ │ └── springframework
│ │ │ │ └── modulith
│ │ │ │ └── events
│ │ │ │ └── neo4j
│ │ │ │ ├── Neo4jEventPublication.java
│ │ │ │ ├── Neo4jEventPublicationAutoConfiguration.java
│ │ │ │ ├── Neo4jEventPublicationRepository.java
│ │ │ │ ├── Neo4jIndexInitializer.java
│ │ │ │ └── package-info.java
│ │ └── resources
│ │ │ └── META-INF
│ │ │ ├── LICENSE
│ │ │ ├── NOTICE
│ │ │ ├── spring-configuration-metadata.json
│ │ │ └── spring
│ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports
│ │ └── test
│ │ └── java
│ │ └── org
│ │ └── springframework
│ │ └── modulith
│ │ ├── events
│ │ └── neo4j
│ │ │ ├── Neo4jEventPublicationRepositoryTest.java
│ │ │ └── Neo4jIndexInitializerTest.java
│ │ └── testapp
│ │ └── TestApplication.java
└── spring-modulith-events-tests
│ ├── pom.xml
│ └── src
│ └── test
│ ├── java
│ └── example
│ │ └── events
│ │ ├── InfrastructureConfiguration.java
│ │ └── PersistentDomainEventIntegrationTest.java
│ └── resources
│ └── logback.xml
├── spring-modulith-examples
├── pom.xml
├── readme.adoc
├── spring-modulith-example-epr-jdbc
│ ├── .mvn
│ │ └── wrapper
│ │ │ ├── maven-wrapper.jar
│ │ │ └── maven-wrapper.properties
│ ├── mvnw
│ ├── mvnw.cmd
│ ├── pom.xml
│ └── src
│ │ ├── main
│ │ ├── asciidoc
│ │ │ └── index.adoc
│ │ ├── java
│ │ │ └── example
│ │ │ │ ├── Application.java
│ │ │ │ ├── inventory
│ │ │ │ ├── InventoryManagement.java
│ │ │ │ ├── InventoryUpdated.java
│ │ │ │ └── package-info.java
│ │ │ │ └── order
│ │ │ │ ├── OrderCompleted.java
│ │ │ │ ├── OrderManagement.java
│ │ │ │ └── package-info.java
│ │ └── resources
│ │ │ ├── application.properties
│ │ │ └── logback.xml
│ │ └── test
│ │ ├── java
│ │ └── example
│ │ │ ├── ApplicationIntegrationTests.java
│ │ │ └── ModularityTests.java
│ │ └── resources
│ │ └── logback-test.xml
├── spring-modulith-example-epr-mongodb
│ ├── .mvn
│ │ └── wrapper
│ │ │ ├── maven-wrapper.jar
│ │ │ └── maven-wrapper.properties
│ ├── mvnw
│ ├── mvnw.cmd
│ ├── pom.xml
│ └── src
│ │ ├── main
│ │ ├── asciidoc
│ │ │ └── index.adoc
│ │ └── java
│ │ │ └── example
│ │ │ ├── Application.java
│ │ │ ├── inventory
│ │ │ ├── InventoryManagement.java
│ │ │ ├── InventoryUpdated.java
│ │ │ └── package-info.java
│ │ │ └── order
│ │ │ ├── OrderCompleted.java
│ │ │ ├── OrderManagement.java
│ │ │ └── package-info.java
│ │ └── test
│ │ ├── java
│ │ └── example
│ │ │ ├── ApplicationIntegrationTests.java
│ │ │ └── ModularityTests.java
│ │ └── resources
│ │ └── logback.xml
├── spring-modulith-example-epr-neo4j
│ ├── .mvn
│ │ └── wrapper
│ │ │ ├── maven-wrapper.jar
│ │ │ └── maven-wrapper.properties
│ ├── mvnw
│ ├── mvnw.cmd
│ ├── pom.xml
│ └── src
│ │ ├── main
│ │ ├── asciidoc
│ │ │ └── index.adoc
│ │ └── java
│ │ │ └── example
│ │ │ ├── Application.java
│ │ │ ├── inventory
│ │ │ ├── InventoryManagement.java
│ │ │ ├── InventoryUpdated.java
│ │ │ └── package-info.java
│ │ │ └── order
│ │ │ ├── OrderCompleted.java
│ │ │ ├── OrderManagement.java
│ │ │ └── package-info.java
│ │ └── test
│ │ └── java
│ │ └── example
│ │ ├── ApplicationIntegrationTests.java
│ │ └── ModularityTests.java
├── spring-modulith-example-full
│ ├── .mvn
│ │ └── wrapper
│ │ │ ├── maven-wrapper.jar
│ │ │ └── maven-wrapper.properties
│ ├── mvnw
│ ├── mvnw.cmd
│ ├── pom.xml
│ └── src
│ │ ├── main
│ │ ├── asciidoc
│ │ │ └── index.adoc
│ │ ├── java
│ │ │ └── example
│ │ │ │ ├── Application.java
│ │ │ │ ├── inventory
│ │ │ │ ├── InventoryInternal.java
│ │ │ │ ├── InventoryManagement.java
│ │ │ │ ├── InventorySettings.java
│ │ │ │ └── package-info.java
│ │ │ │ └── order
│ │ │ │ ├── Order.java
│ │ │ │ ├── OrderCompleted.java
│ │ │ │ ├── OrderManagement.java
│ │ │ │ ├── internal
│ │ │ │ └── OrderInternal.java
│ │ │ │ └── package-info.java
│ │ └── resources
│ │ │ ├── application.properties
│ │ │ └── logback.xml
│ │ └── test
│ │ └── java
│ │ └── example
│ │ ├── ApplicationIntegrationTests.java
│ │ ├── ModularityTests.java
│ │ └── order
│ │ ├── EventPublicationRegistryTests.java
│ │ └── OrderIntegrationTests.java
└── spring-modulith-example-kafka
│ ├── pom.xml
│ ├── readme.adoc
│ └── src
│ ├── main
│ ├── java
│ │ └── example
│ │ │ ├── Application.java
│ │ │ └── order
│ │ │ ├── Order.java
│ │ │ ├── OrderCompleted.java
│ │ │ ├── OrderManagement.java
│ │ │ └── package-info.java
│ └── resources
│ │ ├── application.properties
│ │ └── logback.xml
│ └── test
│ └── java
│ └── example
│ └── TestApplication.java
├── spring-modulith-integration-test
├── pom.xml
└── src
│ ├── main
│ ├── java
│ │ ├── com
│ │ │ └── acme
│ │ │ │ └── myproject
│ │ │ │ ├── Application.java
│ │ │ │ ├── CentralConfiguration.java
│ │ │ │ ├── aot
│ │ │ │ ├── Some$$SpringCGLIB$$Proxy.java
│ │ │ │ ├── Spring__Aot.java
│ │ │ │ └── package-info.java
│ │ │ │ ├── complex
│ │ │ │ ├── api
│ │ │ │ │ ├── ComplexApiComponent.java
│ │ │ │ │ └── package-info.java
│ │ │ │ ├── internal
│ │ │ │ │ ├── ComplextInternalComponent.java
│ │ │ │ │ ├── FirstTypeBasedPort.java
│ │ │ │ │ └── SecondTypeBasePort.java
│ │ │ │ └── spi
│ │ │ │ │ ├── ComplexSpiComponent.java
│ │ │ │ │ └── package-info.java
│ │ │ │ ├── cycleA
│ │ │ │ └── CycleA.java
│ │ │ │ ├── cycleB
│ │ │ │ └── CycleB.java
│ │ │ │ ├── fieldinjected
│ │ │ │ └── WithFieldInjection.java
│ │ │ │ ├── invalid
│ │ │ │ └── InvalidComponent.java
│ │ │ │ ├── invalid2
│ │ │ │ ├── InvalidModuleDependency.java
│ │ │ │ └── package-info.java
│ │ │ │ ├── invalid3
│ │ │ │ ├── InvalidModuleDependency.java
│ │ │ │ └── package-info.java
│ │ │ │ ├── moduleA
│ │ │ │ ├── ServiceComponentA.java
│ │ │ │ ├── SomeConfigurationA.java
│ │ │ │ └── SomeEventA.java
│ │ │ │ ├── moduleB
│ │ │ │ ├── ServiceComponentB.java
│ │ │ │ ├── SomeEventListenerB.java
│ │ │ │ └── internal
│ │ │ │ │ ├── InternalComponentB.java
│ │ │ │ │ └── SupportingComponentB.java
│ │ │ │ ├── moduleC
│ │ │ │ ├── ServiceComponentC.java
│ │ │ │ ├── SomeValueC.java
│ │ │ │ └── package-info.java
│ │ │ │ ├── moduleD
│ │ │ │ ├── ConfigurationPropertiesD.java
│ │ │ │ ├── EventListenerD.java
│ │ │ │ └── SomeConfigurationD.java
│ │ │ │ ├── moduleE
│ │ │ │ └── ServiceComponentE.java
│ │ │ │ ├── open
│ │ │ │ ├── internal
│ │ │ │ │ └── Internal.java
│ │ │ │ └── package-info.java
│ │ │ │ ├── openclient
│ │ │ │ └── ClientToInternal.java
│ │ │ │ ├── opendisallowedclient
│ │ │ │ ├── DisallowedClientOfInternal.java
│ │ │ │ └── package-info.java
│ │ │ │ ├── stereotypes
│ │ │ │ ├── Stereotypes.java
│ │ │ │ └── web
│ │ │ │ │ └── WebRepresentations.java
│ │ │ │ └── validator
│ │ │ │ └── SampleValidator.java
│ │ ├── contributed
│ │ │ ├── ApplicationModuleSourceContribution.java
│ │ │ ├── detected
│ │ │ │ ├── DetectedContribution.java
│ │ │ │ └── package-info.java
│ │ │ └── enumerated
│ │ │ │ ├── EnumeratedContribution.java
│ │ │ │ └── package-info.java
│ │ ├── example
│ │ │ ├── declared
│ │ │ │ ├── first
│ │ │ │ │ ├── Declared.java
│ │ │ │ │ ├── First.java
│ │ │ │ │ └── package-info.java
│ │ │ │ ├── fourth
│ │ │ │ │ └── Fourth.java
│ │ │ │ ├── second
│ │ │ │ │ ├── Second.java
│ │ │ │ │ └── package-info.java
│ │ │ │ └── third
│ │ │ │ │ └── Third.java
│ │ │ └── empty
│ │ │ │ └── EmptyApplication.java
│ │ └── pkg
│ │ │ ├── multipleontype
│ │ │ ├── MarkerOne.java
│ │ │ └── MarkerTwo.java
│ │ │ ├── onpackage
│ │ │ └── package-info.java
│ │ │ └── ontype
│ │ │ ├── Marker.java
│ │ │ └── nested
│ │ │ └── Marker.java
│ └── resources
│ │ └── META-INF
│ │ └── spring-test.factories
│ └── test
│ ├── java
│ ├── com
│ │ └── acme
│ │ │ └── myproject
│ │ │ ├── ModulithTest.java
│ │ │ ├── NonVerifyingModuleTest.java
│ │ │ ├── complex
│ │ │ └── ComplexTest.java
│ │ │ ├── fieldinjected
│ │ │ └── FieldInjectedIntegrationTest.java
│ │ │ ├── moduleA
│ │ │ ├── ApplicationModuleTestIntegrationTests.java
│ │ │ └── ModuleATest.java
│ │ │ ├── moduleB
│ │ │ └── ModuleBTest.java
│ │ │ ├── moduleC
│ │ │ └── ModuleCTest.java
│ │ │ └── moduleD
│ │ │ └── ModuleDTest.java
│ ├── org
│ │ └── springframework
│ │ │ └── modulith
│ │ │ ├── core
│ │ │ ├── ApplicationModuleInformationUnitTests.java
│ │ │ ├── ApplicationModulesIntegrationTest.java
│ │ │ ├── JavaPackageUnitTests.java
│ │ │ ├── TestModuleDetectionStrategy.java
│ │ │ └── util
│ │ │ │ └── ApplicationModulesExporterUnitTests.java
│ │ │ ├── docs
│ │ │ ├── DocumenterTest.java
│ │ │ └── DocumenterUnitTests.java
│ │ │ ├── junit
│ │ │ └── TestExecutionConditionUnitTests.java
│ │ │ └── test
│ │ │ └── TestUtils.java
│ └── otherpackage
│ │ └── integration
│ │ └── TestOutsideModulePackageIntegrationTests.java
│ └── resources
│ ├── META-INF
│ └── spring.factories
│ ├── application.properties
│ └── logback.xml
├── spring-modulith-junit
├── pom.xml
└── src
│ ├── main
│ ├── java
│ │ └── org
│ │ │ └── springframework
│ │ │ └── modulith
│ │ │ └── junit
│ │ │ ├── Changes.java
│ │ │ ├── ModulithExecutionCondition.java
│ │ │ ├── StateStore.java
│ │ │ ├── TestExecutionCondition.java
│ │ │ ├── diff
│ │ │ ├── FileModificationDetector.java
│ │ │ ├── JGitUtil.java
│ │ │ ├── ModifiedFile.java
│ │ │ ├── ReferenceCommitDetector.java
│ │ │ ├── UncommittedChangesDetector.java
│ │ │ ├── UnpushedCommitsDetector.java
│ │ │ ├── WorkingDirectoryChangesDetector.java
│ │ │ └── package-info.java
│ │ │ └── package-info.java
│ └── resources
│ │ ├── META-INF
│ │ ├── LICENSE
│ │ ├── NOTICE
│ │ ├── services
│ │ │ └── org.junit.jupiter.api.extension.Extension
│ │ └── spring-configuration-metadata.json
│ │ └── junit-platform.properties
│ └── test
│ └── java
│ ├── example
│ ├── a
│ │ └── package-info.java
│ ├── b
│ │ └── package-info.java
│ └── package-info.java
│ └── org
│ └── springframework
│ └── modulith
│ └── junit
│ ├── ChangesUnitTests.java
│ └── diff
│ ├── FileModificationDetectorUnitTests.java
│ ├── ModifiedFileUnitTest.java
│ ├── ReferenceCommitDetectorUnitTests.java
│ └── WorkingDirectoryChangesDetectorUnitTests.java
├── spring-modulith-moments
├── pom.xml
├── readme.adoc
└── src
│ ├── main
│ ├── java
│ │ └── org
│ │ │ └── springframework
│ │ │ └── modulith
│ │ │ └── moments
│ │ │ ├── DayHasPassed.java
│ │ │ ├── HourHasPassed.java
│ │ │ ├── MonthHasPassed.java
│ │ │ ├── Quarter.java
│ │ │ ├── QuarterHasPassed.java
│ │ │ ├── ShiftedQuarter.java
│ │ │ ├── WeekHasPassed.java
│ │ │ ├── YearHasPassed.java
│ │ │ ├── autoconfigure
│ │ │ ├── MomentsAutoConfiguration.java
│ │ │ └── package-info.java
│ │ │ ├── package-info.java
│ │ │ └── support
│ │ │ ├── Moments.java
│ │ │ ├── MomentsProperties.java
│ │ │ ├── Now.java
│ │ │ ├── TimeMachine.java
│ │ │ └── package-info.java
│ └── resources
│ │ └── META-INF
│ │ ├── LICENSE
│ │ ├── NOTICE
│ │ ├── spring.factories
│ │ └── spring
│ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports
│ └── test
│ ├── java
│ └── org
│ │ └── springframework
│ │ └── modulith
│ │ └── moments
│ │ ├── QuarterHasPassedUnitTests.java
│ │ ├── QuarterUnitTests.java
│ │ ├── WeekHasPassedUnitTests.java
│ │ ├── YearHasPassedUnitTests.java
│ │ ├── autoconfigure
│ │ └── MomentsAutoConfigurationTests.java
│ │ └── support
│ │ └── MomentsUnitTests.java
│ └── resources
│ └── logback.xml
├── spring-modulith-observability
├── pom.xml
└── src
│ ├── main
│ ├── java
│ │ └── org
│ │ │ └── springframework
│ │ │ └── modulith
│ │ │ └── observability
│ │ │ ├── ModulithEventMetrics.java
│ │ │ ├── ModulithEventMetricsCustomizer.java
│ │ │ ├── autoconfigure
│ │ │ ├── ModuleObservabilityAutoConfiguration.java
│ │ │ ├── SpringDataRestModuleObservabilityAutoConfiguration.java
│ │ │ └── package-info.java
│ │ │ ├── package-info.java
│ │ │ └── support
│ │ │ ├── CrossModuleEventCounterFactory.java
│ │ │ ├── DefaultModulithObservationConvention.java
│ │ │ ├── DefaultObservedModule.java
│ │ │ ├── LocalServiceRenamingSpanFilter.java
│ │ │ ├── ModuleEntryInterceptor.java
│ │ │ ├── ModuleEventListener.java
│ │ │ ├── ModuleObservabilityBeanPostProcessor.java
│ │ │ ├── ModuleObservabilitySupport.java
│ │ │ ├── ModulePassingObservationFilter.java
│ │ │ ├── ModulithContext.java
│ │ │ ├── ModulithMetrics.java
│ │ │ ├── ModulithObservationConvention.java
│ │ │ ├── ModulithObservations.java
│ │ │ ├── ObservedModule.java
│ │ │ ├── ObservedModuleType.java
│ │ │ ├── SpringDataRestModuleObservabilityBeanPostProcessor.java
│ │ │ └── package-info.java
│ └── resources
│ │ └── META-INF
│ │ ├── LICENSE
│ │ ├── NOTICE
│ │ └── spring
│ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports
│ └── test
│ ├── java
│ ├── example
│ │ ├── ExampleApplication.java
│ │ ├── ExampleApplicationIntegrationTests.java
│ │ └── sample
│ │ │ ├── ObservedComponent.java
│ │ │ ├── SampleComponent.java
│ │ │ ├── SampleConfiguration.java
│ │ │ ├── SampleMessageListener.java
│ │ │ ├── SampleProperties.java
│ │ │ └── TestListener.java
│ └── org
│ │ └── springframework
│ │ └── modulith
│ │ └── observability
│ │ └── support
│ │ ├── CrossModuleEventCounterFactoryUnitTests.java
│ │ ├── DefaultObservedModuleUnitTests.java
│ │ ├── ModuleEventListenerUnitTests.java
│ │ ├── ModuleObservabilityBeanPostProcessorIntegrationTests.java
│ │ ├── ModuleObservabilityBeanPostProcessorUnitTests.java
│ │ └── ObservedModuleTypeUnitTests.java
│ └── resources
│ ├── META-INF
│ └── spring.factories
│ ├── application.properties
│ └── logback.xml
├── spring-modulith-runtime
├── pom.xml
└── src
│ ├── main
│ ├── java
│ │ └── org
│ │ │ └── springframework
│ │ │ └── modulith
│ │ │ └── runtime
│ │ │ ├── ApplicationModulesRuntime.java
│ │ │ ├── ApplicationRuntime.java
│ │ │ ├── SpringBootApplicationRuntime.java
│ │ │ ├── autoconfigure
│ │ │ ├── ApplicationModuleInitializerInvoker.java
│ │ │ ├── ApplicationModuleMetadata.java
│ │ │ ├── ApplicationModulesFileGeneratingProcessor.java
│ │ │ ├── DefaultApplicationModuleInitializerInvoker.java
│ │ │ ├── LoggingApplicationModuleInitializerAdapter.java
│ │ │ ├── MissingRuntimeDependency.java
│ │ │ ├── MissingRuntimeDependencyFailureAnalyzer.java
│ │ │ ├── PrecomputedApplicationModuleInitializerInvoker.java
│ │ │ ├── SpringModulithRuntimeAutoConfiguration.java
│ │ │ └── package-info.java
│ │ │ └── package-info.java
│ └── resources
│ │ └── META-INF
│ │ ├── LICENSE
│ │ ├── NOTICE
│ │ ├── spring.factories
│ │ └── spring
│ │ ├── aot.factories
│ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports
│ └── test
│ ├── java
│ ├── different
│ │ └── moduleB
│ │ │ └── ModuleBType.java
│ ├── example
│ │ ├── SampleApplication.java
│ │ └── moduleA
│ │ │ └── ModuleAType.java
│ └── org
│ │ └── springframework
│ │ └── modulith
│ │ └── runtime
│ │ ├── ApplicationModulesRuntimeIntegrationTests.java
│ │ ├── SpringBootApplicationRuntimeUnitTests.java
│ │ └── autoconfigure
│ │ ├── PrecomputedApplicationModuleInitializerInvokerUnitTests.java
│ │ └── SpringModulithRuntimeAutoConfigurationIntegrationTests.java
│ └── resources
│ ├── META-INF
│ └── spring-modulith
│ │ └── application-modules.json
│ ├── application.properties
│ └── logback.xml
├── spring-modulith-starters
├── pom.xml
├── spring-modulith-starter-core
│ ├── pom.xml
│ └── src
│ │ └── main
│ │ └── resources
│ │ └── META-INF
│ │ ├── LICENSE
│ │ └── NOTICE
├── spring-modulith-starter-insight
│ ├── pom.xml
│ └── src
│ │ └── main
│ │ └── resources
│ │ ├── LICENSE
│ │ └── NOTICE
├── spring-modulith-starter-jdbc
│ ├── pom.xml
│ └── src
│ │ └── main
│ │ └── resources
│ │ └── META-INF
│ │ ├── LICENSE
│ │ └── NOTICE
├── spring-modulith-starter-jpa
│ ├── pom.xml
│ └── src
│ │ └── main
│ │ └── resources
│ │ └── META-INF
│ │ ├── LICENSE
│ │ └── NOTICE
├── spring-modulith-starter-mongodb
│ ├── pom.xml
│ └── src
│ │ └── main
│ │ └── resources
│ │ └── META-INF
│ │ ├── LICENSE
│ │ └── NOTICE
├── spring-modulith-starter-neo4j
│ ├── pom.xml
│ └── src
│ │ └── main
│ │ └── resources
│ │ └── META-INF
│ │ ├── LICENSE
│ │ └── NOTICE
└── spring-modulith-starter-test
│ ├── pom.xml
│ └── src
│ └── main
│ └── resources
│ └── META-INF
│ ├── LICENSE
│ └── NOTICE
├── spring-modulith-test
├── pom.xml
└── src
│ ├── main
│ ├── java
│ │ └── org
│ │ │ └── springframework
│ │ │ └── modulith
│ │ │ └── test
│ │ │ ├── AggregateTestUtils.java
│ │ │ ├── ApplicationModuleTest.java
│ │ │ ├── AssertablePublishedEvents.java
│ │ │ ├── DefaultAssertablePublishedEvents.java
│ │ │ ├── DefaultPublishedEvents.java
│ │ │ ├── EnableScenarios.java
│ │ │ ├── ModuleContextCustomizerFactory.java
│ │ │ ├── ModuleTestAutoConfiguration.java
│ │ │ ├── ModuleTestExecution.java
│ │ │ ├── ModuleTypeExcludeFilter.java
│ │ │ ├── PublishedEvents.java
│ │ │ ├── PublishedEventsAssert.java
│ │ │ ├── PublishedEventsExtension.java
│ │ │ ├── PublishedEventsFactory.java
│ │ │ ├── PublishedEventsParameterResolver.java
│ │ │ ├── Scenario.java
│ │ │ ├── ScenarioCustomizer.java
│ │ │ ├── ScenarioParameterResolver.java
│ │ │ ├── TestApplicationModules.java
│ │ │ ├── TypedEvents.java
│ │ │ └── package-info.java
│ └── resources
│ │ └── META-INF
│ │ ├── LICENSE
│ │ ├── NOTICE
│ │ └── spring.factories
│ └── test
│ ├── java
│ ├── example
│ │ ├── AsyncEventListener.java
│ │ ├── TestConfiguration.java
│ │ └── module
│ │ │ ├── SampleTestA.java
│ │ │ └── SampleTestB.java
│ └── org
│ │ └── springframework
│ │ └── modulith
│ │ └── test
│ │ ├── EnableScenarioIntegrationTests.java
│ │ ├── ModuleContextCustomizerUnitTests.java
│ │ ├── ModuleTestAutoConfigurationIntegrationTests.java
│ │ ├── ModuleTestAutoConfigurationUnitTests.java
│ │ ├── ModuleTypeExcludeFilterUnitTests.java
│ │ ├── PublishedEventsIntegrationTests.java
│ │ ├── PublishedEventsParameterResolverUnitTests.java
│ │ ├── PublishedEventsUnitTests.java
│ │ ├── ScenarioCustomizerIntegrationTests.java
│ │ └── ScenarioUnitTests.java
│ └── resources
│ ├── META-INF
│ └── spring.factories
│ └── logback.xml
└── src
└── docs
├── antora
├── .github
│ └── workflows
│ │ └── deploy-docs.yml
├── antora-playbook.yml
├── antora.yml
├── modules
│ └── ROOT
│ │ ├── assets
│ │ └── images
│ │ │ ├── event-publication-registry-end.png
│ │ │ ├── event-publication-registry-start.png
│ │ │ └── observability.png
│ │ ├── nav.adoc
│ │ ├── pages
│ │ ├── appendix.adoc
│ │ ├── documentation.adoc
│ │ ├── events.adoc
│ │ ├── fundamentals.adoc
│ │ ├── index.adoc
│ │ ├── moments.adoc
│ │ ├── production-ready.adoc
│ │ ├── runtime.adoc
│ │ ├── testing.adoc
│ │ └── verification.adoc
│ │ └── partials
│ │ └── spring-modulith-events-jdbc-src
└── resources
│ └── antora-resources
│ └── antora.yml
└── resources
└── assemblies
└── docs.xml
/.git-authors:
--------------------------------------------------------------------------------
1 | authors:
2 | db: Dmitry Belyaev; dbelyaev
3 | bk: Björn Kieling; bkieling
4 | email:
5 | domain: vmware.com
6 |
--------------------------------------------------------------------------------
/.github/dco.yml:
--------------------------------------------------------------------------------
1 | require:
2 | members: false
3 |
--------------------------------------------------------------------------------
/.github/workflows/build-prs.yaml:
--------------------------------------------------------------------------------
1 | name: PR Build
2 |
3 | on:
4 | pull_request:
5 | branches: [ main ]
6 |
7 | jobs:
8 | build:
9 | name: Build project
10 | runs-on: ubuntu-latest
11 |
12 | steps:
13 |
14 | - name: Check out sources
15 | uses: actions/checkout@v4
16 |
17 | - name: Set up JDK 17
18 | uses: actions/setup-java@v3
19 | with:
20 | distribution: 'temurin'
21 | java-version: 17
22 | cache: 'maven'
23 |
24 | - name: Build with Maven
25 | run: ./mvnw -B
26 |
--------------------------------------------------------------------------------
/.github/workflows/build.yaml:
--------------------------------------------------------------------------------
1 | name: CI Build
2 |
3 | on:
4 | push:
5 | branches: [ main, 1.4.x, 1.3.x, 1.2.x, feature/* ]
6 |
7 | jobs:
8 | build:
9 | name: Build project
10 | runs-on: ubuntu-latest
11 |
12 | steps:
13 |
14 | - name: Check out sources
15 | uses: actions/checkout@v4
16 |
17 | - name: Set up JDK 17
18 | uses: actions/setup-java@v4
19 | with:
20 | distribution: 'temurin'
21 | java-version: 17
22 | cache: 'maven'
23 |
24 | - name: Deploy to Artifactory
25 | env:
26 | ARTIFACTORY_USERNAME: ${{ secrets.ARTIFACTORY_USERNAME }}
27 | ARTIFACTORY_PASSWORD: ${{ secrets.ARTIFACTORY_PASSWORD }}
28 | DEVELOCITY_ACCESS_KEY: ${{ secrets.GRADLE_ENTERPRISE_SECRET_ACCESS_KEY }}
29 | run: ./mvnw -B clean deploy -Pci,artifactory,nullaway
30 |
--------------------------------------------------------------------------------
/.github/workflows/deploy-docs.yml:
--------------------------------------------------------------------------------
1 | name: Deploy Docs
2 | on:
3 | push:
4 | branches-ignore: [ gh-pages ]
5 | tags: '**'
6 | repository_dispatch:
7 | types: request-build-reference # legacy
8 | #schedule:
9 | #- cron: '0 10 * * *' # Once per day at 10am UTC
10 | workflow_dispatch:
11 | permissions:
12 | actions: write
13 | jobs:
14 | build:
15 | runs-on: ubuntu-latest
16 | if: github.repository_owner == 'spring-projects'
17 | steps:
18 | - name: Checkout
19 | uses: actions/checkout@v4
20 | with:
21 | ref: docs-build
22 | fetch-depth: 1
23 | - name: Dispatch (partial build)
24 | if: github.ref_type == 'branch'
25 | env:
26 | GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
27 | run: gh workflow run deploy-docs.yml -r $(git rev-parse --abbrev-ref HEAD) -f build-refname=${{ github.ref_name }}
28 | - name: Dispatch (full build)
29 | if: github.ref_type == 'tag'
30 | env:
31 | GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
32 | run: gh workflow run deploy-docs.yml -r $(git rev-parse --abbrev-ref HEAD)
33 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | target/
2 | .idea/
3 | .flattened-pom.xml
4 | .settings/
5 | *.iml
6 | .project
7 | .classpath
8 | .springBeans
9 | target/
10 | .factorypath
11 | changelog.txt
12 | .mvn/.develocity
13 |
14 | #IntelliJ Stuff
15 | .idea
16 | *.iml
17 |
18 | # Antora
19 | node
20 | node_modules
21 | package.json
22 | package-lock.json
--------------------------------------------------------------------------------
/.mvn/extensions.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | io.spring.develocity.conventions
5 | develocity-conventions-maven-extension
6 | 0.0.22
7 |
8 |
9 |
--------------------------------------------------------------------------------
/.mvn/jvm.config:
--------------------------------------------------------------------------------
1 | --add-exports jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED
2 | --add-exports jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED
3 | --add-exports jdk.compiler/com.sun.tools.javac.main=ALL-UNNAMED
4 | --add-exports jdk.compiler/com.sun.tools.javac.model=ALL-UNNAMED
5 | --add-exports jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED
6 | --add-exports jdk.compiler/com.sun.tools.javac.processing=ALL-UNNAMED
7 | --add-exports jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED
8 | --add-exports jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED
9 | --add-opens jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED
10 | --add-opens jdk.compiler/com.sun.tools.javac.comp=ALL-UNNAMED
11 |
--------------------------------------------------------------------------------
/.mvn/wrapper/maven-wrapper.properties:
--------------------------------------------------------------------------------
1 | # Licensed to the Apache Software Foundation (ASF) under one
2 | # or more contributor license agreements. See the NOTICE file
3 | # distributed with this work for additional information
4 | # regarding copyright ownership. The ASF licenses this file
5 | # to you under the Apache License, Version 2.0 (the
6 | # "License"); you may not use this file except in compliance
7 | # with the License. You may obtain a copy of the License at
8 | #
9 | # http://www.apache.org/licenses/LICENSE-2.0
10 | #
11 | # Unless required by applicable law or agreed to in writing,
12 | # software distributed under the License is distributed on an
13 | # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14 | # KIND, either express or implied. See the License for the
15 | # specific language governing permissions and limitations
16 | # under the License.
17 | wrapperVersion=3.3.2
18 | distributionType=only-script
19 | distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.9/apache-maven-3.9.9-bin.zip
20 |
--------------------------------------------------------------------------------
/CONTRIBUTING.adoc:
--------------------------------------------------------------------------------
1 | = Contributing to Spring Modulith
2 |
3 | * As a contributor to this project you aggree to follow the Spring Project https://github.com/spring-projects/.github/blob/main/CODE_OF_CONDUCT.md[code of conduct].
4 | * All commits must include a __Signed-off-by__ trailer at the end of each commit message to indicate that the contributor agrees to the Developer Certificate of Origin.
5 | For additional details, please refer to the blog post https://spring.io/blog/2025/01/06/hello-dco-goodbye-cla-simplifying-contributions-to-spring[Hello DCO, Goodbye CLA: Simplifying Contributions to Spring].
6 |
--------------------------------------------------------------------------------
/application.yml:
--------------------------------------------------------------------------------
1 | changelog:
2 | repository: spring-projects/spring-modulith
3 | sections:
4 | - title: ":star: New Features"
5 | labels: ["type: enhancement"]
6 | - title: ":bulb: Improvements"
7 | labels: ["type: improvement"]
8 | - title: ":beetle: Bugs"
9 | labels: ["type: bug"]
10 | - title: ":book: Documentation"
11 | labels: ["in: reference documentation"]
12 | - title: ":hammer: Dependency Upgrades"
13 | labels: ["type: dependency-upgrade"]
14 |
--------------------------------------------------------------------------------
/etc/copy-ticket.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | sourceGh="GH-$1"
4 | json=$(gh issue view $1 --json=title,labels)
5 |
6 | title=$(echo $json | jq -r '.title')
7 | labels=$(echo $json | jq -r '.labels[].name' | paste -sd ',' -)
8 |
9 | gh issue create --title "$title" \
10 | --body "Back-port of $sourceGh." \
11 | --label "$labels" \
12 | --assignee "@me" \
13 | --milestone "$2"
14 |
--------------------------------------------------------------------------------
/etc/ide/README.md:
--------------------------------------------------------------------------------
1 | # Spring Data Code Formatting Settings
2 |
3 | This directory contains `eclipse-formatting.xml` and `intellij.importorder` settings files to be used with Eclipse and IntelliJ.
4 |
5 | ## Eclipse Setup
6 |
7 | Import both files in Eclipse through the Preferences dialog.
8 |
9 | ## IntelliJ Setup
10 |
11 | Use the IntelliJ [Eclipse Code Formatter](https://plugins.jetbrains.com/plugin/6546-eclipse-code-formatter) plugin to configure code formatting and import ordering with the newest Eclipse formatter version.
12 |
13 | Additionally, make sure to configure your import settings in `Editor -> Code Style -> Java` with the following explicit settings:
14 |
15 | * Use tab character indents
16 | * Class count to use import with `*`: 10
17 | * Names count to use static import with `*`: 1
18 |
--------------------------------------------------------------------------------
/etc/ide/intellij.importorder:
--------------------------------------------------------------------------------
1 | #Organize Import Order
2 | #Mon Nov 14 09:58:12 CET 2016
3 | 5=com
4 | 4=org
5 | 3=javax
6 | 2=java
7 | 1=
8 | 0=\#
9 |
--------------------------------------------------------------------------------
/etc/mappings.txt:
--------------------------------------------------------------------------------
1 | jmolecules-bom=jMolecules
2 | spring-framework=Spring Framework
3 | micrometer-tracing=Micrometer Tracing
4 |
--------------------------------------------------------------------------------
/etc/test/setup-test-env.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | # main
4 |
5 | start_dir=$(pwd)
6 | script_dir=$(dirname "$(readlink -f "${BASH_SOURCE[0]}")")
7 | functions="$script_dir/../functions.sh"
8 |
9 | source "$script_dir/includes/copy-repo.sh"
10 | source "$script_dir/includes/create-issues-commits-milestones.sh"
11 |
12 | echo "DONE"
13 |
--------------------------------------------------------------------------------
/lombok.config:
--------------------------------------------------------------------------------
1 | lombok.nonNull.exceptionType = IllegalArgumentException
2 | lombok.log.fieldName = LOG
3 | lombok.addLombokGeneratedAnnotation = true
4 | lombok.accessors.chain=true
5 |
--------------------------------------------------------------------------------
/spring-modulith-actuator/src/main/java/org/springframework/modulith/actuator/autoconfigure/package-info.java:
--------------------------------------------------------------------------------
1 | /**
2 | * Autoconfiguration for Spring Modulith actuators.
3 | */
4 | @org.jspecify.annotations.NullMarked
5 | package org.springframework.modulith.actuator.autoconfigure;
6 |
--------------------------------------------------------------------------------
/spring-modulith-actuator/src/main/java/org/springframework/modulith/actuator/package-info.java:
--------------------------------------------------------------------------------
1 | /**
2 | * Spring Boot actuator support for Spring Modulith.
3 | */
4 | @org.jspecify.annotations.NullMarked
5 | package org.springframework.modulith.actuator;
6 |
--------------------------------------------------------------------------------
/spring-modulith-actuator/src/main/resources/META-INF/NOTICE:
--------------------------------------------------------------------------------
1 | Spring Modulith ${project.version}
2 | Copyright (c) 2021-2024 Broadcom, Inc.
3 |
4 | This product is licensed to you under the Apache License, Version 2.0
5 | (the "License"). You may not use this product except in compliance with
6 | the License.
7 |
--------------------------------------------------------------------------------
/spring-modulith-actuator/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports:
--------------------------------------------------------------------------------
1 | org.springframework.modulith.actuator.autoconfigure.ApplicationModulesEndpointConfiguration
2 |
--------------------------------------------------------------------------------
/spring-modulith-actuator/src/test/java/example/App.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2022-2025 the original author or authors.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package example;
17 |
18 | import org.springframework.boot.autoconfigure.SpringBootApplication;
19 |
20 | /**
21 | * @author Oliver Drotbohm
22 | */
23 | @SpringBootApplication
24 | class App {}
25 |
--------------------------------------------------------------------------------
/spring-modulith-actuator/src/test/java/example/a/ComponentA.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2022-2025 the original author or authors.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package example.a;
17 |
18 | import org.springframework.stereotype.Component;
19 |
20 | /**
21 | * @author Oliver Drotbohm
22 | */
23 | @Component
24 | public class ComponentA {
25 |
26 | }
27 |
--------------------------------------------------------------------------------
/spring-modulith-actuator/src/test/java/org/springframework/modulith/actuator/autoconfigure/ApplicationModulesEndpointConfigurationIntegrationTests.java:
--------------------------------------------------------------------------------
1 | package org.springframework.modulith.actuator.autoconfigure;
2 |
3 | import static org.assertj.core.api.Assertions.*;
4 |
5 | import org.junit.jupiter.api.Test;
6 | import org.springframework.beans.factory.annotation.Autowired;
7 | import org.springframework.boot.autoconfigure.SpringBootApplication;
8 | import org.springframework.boot.test.context.SpringBootTest;
9 | import org.springframework.context.ApplicationContext;
10 | import org.springframework.modulith.actuator.ApplicationModulesEndpoint;
11 |
12 | /**
13 | * Integration tests for {@link ApplicationModulesEndpointConfiguration}.
14 | *
15 | * @author Oliver Drotbohm
16 | */
17 | @SpringBootTest
18 | class ApplicationModulesEndpointConfigurationIntegrationTests {
19 |
20 | @SpringBootApplication
21 | static class SampleApp {}
22 |
23 | @Autowired ApplicationContext context;
24 |
25 | @Test // GH-87
26 | void bootstrapRegistersRuntimeInstances() {
27 | assertThat(context.getBean(ApplicationModulesEndpoint.class)).isNotNull();
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/spring-modulith-actuator/src/test/resources/logback.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | %d %5p %40.40c:%4L - %m%n
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/spring-modulith-api/src/main/java/org/springframework/modulith/package-info.java:
--------------------------------------------------------------------------------
1 | /**
2 | * Core abstractions of Spring Modulith. To be referred to in user applications.
3 | */
4 | @org.jspecify.annotations.NullMarked
5 | package org.springframework.modulith;
6 |
--------------------------------------------------------------------------------
/spring-modulith-api/src/main/resources/META-INF/NOTICE:
--------------------------------------------------------------------------------
1 | Spring Modulith ${project.version}
2 | Copyright (c) 2021-2024 Broadcom, Inc.
3 |
4 | This product is licensed to you under the Apache License, Version 2.0
5 | (the "License"). You may not use this product except in compliance with
6 | the License.
7 |
--------------------------------------------------------------------------------
/spring-modulith-apt/src/main/java/org/springframework/modulith/apt/package-info.java:
--------------------------------------------------------------------------------
1 | /**
2 | * An annotation processor to extract Javadoc from application code for inclusion in generated architecture
3 | * documentation.
4 | *
5 | * @since 1.3
6 | */
7 | package org.springframework.modulith.apt;
8 |
--------------------------------------------------------------------------------
/spring-modulith-apt/src/main/resources/META-INF/NOTICE:
--------------------------------------------------------------------------------
1 | Spring Modulith ${project.version}
2 | Copyright (c) 2021-2024 Broadcom, Inc.
3 |
4 | This product is licensed to you under the Apache License, Version 2.0
5 | (the "License"). You may not use this product except in compliance with
6 | the License.
7 |
--------------------------------------------------------------------------------
/spring-modulith-apt/src/main/resources/META-INF/services/javax.annotation.processing.Processor:
--------------------------------------------------------------------------------
1 | org.springframework.modulith.apt.SpringModulithProcessor
2 |
--------------------------------------------------------------------------------
/spring-modulith-apt/src/test/resources/example/SampleComponent.java:
--------------------------------------------------------------------------------
1 | package example;
2 |
3 | /**
4 | * Multi-line, type-level
5 | * Javadoc.
6 | *
7 | * @author Oliver Drotbohm
8 | */
9 | class SampleComponent {
10 |
11 | /**
12 | * Javadoc of {@link #on(Object)}.
13 | *
14 | * @param object
15 | */
16 | void on(Object object) { }
17 |
18 | /**
19 | * Javadoc of {@link #on(String)}.
20 | *
21 | * @param string
22 | */
23 | void on(String string) { }
24 |
25 | void noJavadoc() {}
26 | }
27 |
--------------------------------------------------------------------------------
/spring-modulith-apt/src/test/resources/example/SampleInterface.java:
--------------------------------------------------------------------------------
1 | package example;
2 |
3 | /**
4 | * Interface comment.
5 | *
6 | * @author Oliver Drotbohm
7 | */
8 | interface SampleInterface {
9 |
10 | /**
11 | * Method with nested class parameter.
12 | *
13 | * @param parameter
14 | */
15 | void someMethod(SampleClass parameter);
16 |
17 | /**
18 | * Nested class comment.
19 | *
20 | * @author Oliver Drotbohm
21 | */
22 | class SampleClass {}
23 | }
24 |
--------------------------------------------------------------------------------
/spring-modulith-core/src/main/java/org/springframework/modulith/core/DependencyDepth.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2022-2025 the original author or authors.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package org.springframework.modulith.core;
17 |
18 | public enum DependencyDepth {
19 |
20 | NONE,
21 |
22 | IMMEDIATE,
23 |
24 | ALL;
25 | }
26 |
--------------------------------------------------------------------------------
/spring-modulith-core/src/main/java/org/springframework/modulith/core/config/package-info.java:
--------------------------------------------------------------------------------
1 | /**
2 | * Core configuration abstractions of Spring Modulith.
3 | */
4 | @org.jspecify.annotations.NullMarked
5 | package org.springframework.modulith.core.config;
6 |
--------------------------------------------------------------------------------
/spring-modulith-core/src/main/java/org/springframework/modulith/core/package-info.java:
--------------------------------------------------------------------------------
1 | /**
2 | * Core, internal abstractions of Spring Modulith.
3 | */
4 | @org.jspecify.annotations.NullMarked
5 | package org.springframework.modulith.core;
6 |
--------------------------------------------------------------------------------
/spring-modulith-core/src/main/java/org/springframework/modulith/core/util/package-info.java:
--------------------------------------------------------------------------------
1 | /**
2 | * Utilities.
3 | */
4 | package org.springframework.modulith.core.util;
5 |
--------------------------------------------------------------------------------
/spring-modulith-core/src/main/resources/META-INF/NOTICE:
--------------------------------------------------------------------------------
1 | Spring Modulith ${project.version}
2 | Copyright (c) 2021-2024 Broadcom, Inc.
3 |
4 | This product is licensed to you under the Apache License, Version 2.0
5 | (the "License"). You may not use this product except in compliance with
6 | the License.
7 |
--------------------------------------------------------------------------------
/spring-modulith-core/src/main/resources/META-INF/spring-configuration-metadata.json:
--------------------------------------------------------------------------------
1 | {
2 | "properties": [
3 | {
4 | "name": "spring.modulith.detection-strategy",
5 | "type": "java.lang.String",
6 | "description": "The strategy how to detect application modules."
7 | }
8 | ],
9 | "hints": [
10 | {
11 | "name": "spring.modulith.detection-strategy",
12 | "values": [
13 | {
14 | "value": "direct-sub-packages",
15 | "description" : "Selects the direct sub-packages underneath the main application class as application module base interfaces."
16 | },
17 | {
18 | "value": "explicitly-annotated",
19 | "description" : "Only selects explicitly annotated packages as application module base packages (via @ApplicationModules or jMolecules' DDD @Module)."
20 | }
21 | ],
22 | "providers": [
23 | {
24 | "name": "class-reference",
25 | "parameters": {
26 | "target": "org.springframework.modulith.core.ApplicationModuleDetectionStrategy"
27 | }
28 | }
29 | ]
30 | }
31 | ]
32 | }
33 |
--------------------------------------------------------------------------------
/spring-modulith-core/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports:
--------------------------------------------------------------------------------
1 | org.springframework.modulith.core.config.ApplicationModuleInitializerRuntimeVerification
2 |
--------------------------------------------------------------------------------
/spring-modulith-core/src/test/java/com/acme/withatbean/SampleConfiguration.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2019-2025 the original author or authors.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package com.acme.withatbean;
17 |
18 | import javax.sql.DataSource;
19 |
20 | import org.springframework.context.annotation.Bean;
21 | import org.springframework.context.annotation.Configuration;
22 |
23 | /**
24 | * @author Oliver Drotbohm
25 | */
26 | @Configuration
27 | public class SampleConfiguration {
28 |
29 | @Bean
30 | DataSource dataSource() {
31 | return null;
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/spring-modulith-core/src/test/java/contributed/detected/package-info.java:
--------------------------------------------------------------------------------
1 | @org.springframework.modulith.ApplicationModule
2 | package contributed.detected;
3 |
--------------------------------------------------------------------------------
/spring-modulith-core/src/test/java/contributed/enumerated/package-info.java:
--------------------------------------------------------------------------------
1 | package contributed.enumerated;
2 |
--------------------------------------------------------------------------------
/spring-modulith-core/src/test/java/empty/EmptyApplication.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2024-2025 the original author or authors.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package empty;
17 |
18 | import org.springframework.modulith.Modulithic;
19 |
20 | /**
21 | * @author Oliver Drotbohm
22 | */
23 | @Modulithic(systemName = "customSystemName")
24 | public class EmptyApplication {}
25 |
--------------------------------------------------------------------------------
/spring-modulith-core/src/test/java/example/Example.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2024-2025 the original author or authors.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package example;
17 |
18 | /**
19 | *
20 | * @author Oliver Drotbohm
21 | */
22 | public class Example {
23 |
24 | }
25 |
--------------------------------------------------------------------------------
/spring-modulith-core/src/test/java/example/invalid/Invalid.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2023-2025 the original author or authors.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package example.invalid;
17 |
18 | import example.ni.nested.InNested;
19 | import example.ni.nested.b.first.InNestedBFirst;
20 |
21 | /**
22 | * @author Oliver Drotbohm
23 | */
24 | public class Invalid {
25 | InNested invalid;
26 | InNestedBFirst invalidToo;
27 | }
28 |
--------------------------------------------------------------------------------
/spring-modulith-core/src/test/java/example/jmolecules/package-info.java:
--------------------------------------------------------------------------------
1 | @org.jmolecules.ddd.annotation.Module(id = "customId")
2 | package example.jmolecules;
3 |
--------------------------------------------------------------------------------
/spring-modulith-core/src/test/java/example/metani/Exposed.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2025 the original author or authors.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package example.metani;
17 |
18 | /**
19 | * @author Oliver Drotbohm
20 | */
21 | @ModuleApi
22 | public class Exposed {}
23 |
--------------------------------------------------------------------------------
/spring-modulith-core/src/test/java/example/ni/AnnotatedNamedInterfaceType.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2023-2025 the original author or authors.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package example.ni;
17 |
18 | import org.springframework.modulith.NamedInterface;
19 |
20 | /**
21 | * @author Oliver Drotbohm
22 | */
23 | @NamedInterface("api")
24 | public interface AnnotatedNamedInterfaceType {
25 |
26 | }
27 |
--------------------------------------------------------------------------------
/spring-modulith-core/src/test/java/example/ni/RootType.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2023-2025 the original author or authors.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package example.ni;
17 |
18 | import example.ni.nested.b.first.InNestedBFirst;
19 | import lombok.RequiredArgsConstructor;
20 |
21 | import org.springframework.stereotype.Component;
22 |
23 | /**
24 | * @author Oliver Drotbohm
25 | */
26 | @Component
27 | @RequiredArgsConstructor
28 | public class RootType {
29 |
30 | final InNestedBFirst inNestedBFirst;
31 | }
32 |
--------------------------------------------------------------------------------
/spring-modulith-core/src/test/java/example/ni/api/ApiType.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2023-2025 the original author or authors.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package example.ni.api;
17 |
18 | /**
19 | * @author Oliver Drotbohm
20 | */
21 | public interface ApiType {}
22 |
--------------------------------------------------------------------------------
/spring-modulith-core/src/test/java/example/ni/api/package-info.java:
--------------------------------------------------------------------------------
1 | @org.springframework.modulith.NamedInterface
2 | package example.ni.api;
3 |
--------------------------------------------------------------------------------
/spring-modulith-core/src/test/java/example/ni/internal/AdditionalSpiType.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2023-2025 the original author or authors.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package example.ni.internal;
17 |
18 | import org.springframework.modulith.NamedInterface;
19 |
20 | /**
21 | * @author Oliver Drotbohm
22 | */
23 | @NamedInterface({ "spi", "kpi" })
24 | public interface AdditionalSpiType {}
25 |
--------------------------------------------------------------------------------
/spring-modulith-core/src/test/java/example/ni/internal/DefaultedNamedInterfaceType.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2023-2025 the original author or authors.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package example.ni.internal;
17 |
18 | import org.springframework.modulith.NamedInterface;
19 |
20 | /**
21 | * @author Oliver Drotbohm
22 | */
23 | @NamedInterface
24 | public interface DefaultedNamedInterfaceType {
25 |
26 | }
27 |
--------------------------------------------------------------------------------
/spring-modulith-core/src/test/java/example/ni/internal/Internal.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2024-2025 the original author or authors.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package example.ni.internal;
17 |
18 | /**
19 | * @author Oliver Drotbohm
20 | */
21 | public interface Internal {}
22 |
--------------------------------------------------------------------------------
/spring-modulith-core/src/test/java/example/ni/nested/InNested.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2023-2025 the original author or authors.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package example.ni.nested;
17 |
18 | /**
19 | * @author Oliver Drotbohm
20 | */
21 | public class InNested {}
22 |
--------------------------------------------------------------------------------
/spring-modulith-core/src/test/java/example/ni/nested/a/InNestedA.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2023-2025 the original author or authors.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package example.ni.nested.a;
17 |
18 | import example.ni.internal.Internal;
19 |
20 | /**
21 | * @author Oliver Drotbohm
22 | */
23 | public class InNestedA {
24 | Internal internal;
25 | }
26 |
--------------------------------------------------------------------------------
/spring-modulith-core/src/test/java/example/ni/nested/b/InNestedB.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2023-2025 the original author or authors.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package example.ni.nested.b;
17 |
18 | import example.ni.RootType;
19 | import example.ni.nested.b.first.InNestedBFirst;
20 | import lombok.RequiredArgsConstructor;
21 |
22 | import org.springframework.stereotype.Component;
23 |
24 | /**
25 | * @author Oliver Drotbohm
26 | */
27 | @Component
28 | @RequiredArgsConstructor
29 | public class InNestedB {
30 |
31 | final InNestedBFirst downward;
32 | final RootType upward;
33 | }
34 |
--------------------------------------------------------------------------------
/spring-modulith-core/src/test/java/example/ni/nested/b/first/InNestedBFirst.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2023-2025 the original author or authors.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package example.ni.nested.b.first;
17 |
18 | import org.springframework.stereotype.Component;
19 |
20 | /**
21 | * @author Oliver Drotbohm
22 | */
23 | @Component
24 | public class InNestedBFirst {
25 |
26 | }
27 |
--------------------------------------------------------------------------------
/spring-modulith-core/src/test/java/example/ni/nested/b/first/package-info.java:
--------------------------------------------------------------------------------
1 | @org.springframework.modulith.ApplicationModule
2 | package example.ni.nested.b.first;
3 |
--------------------------------------------------------------------------------
/spring-modulith-core/src/test/java/example/ni/nested/b/second/InNestedBSecond.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2023-2025 the original author or authors.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package example.ni.nested.b.second;
17 |
18 | import example.ni.nested.InNested;
19 | import example.ni.nested.b.first.InNestedBFirst;
20 |
21 | /**
22 | * @author Oliver Drotbohm
23 | */
24 | public class InNestedBSecond {
25 | InNested inNested;
26 | InNestedBFirst siblingReference;
27 | }
28 |
--------------------------------------------------------------------------------
/spring-modulith-core/src/test/java/example/ni/nested/b/second/package-info.java:
--------------------------------------------------------------------------------
1 | @org.springframework.modulith.ApplicationModule(id = "secondCustomized")
2 | package example.ni.nested.b.second;
3 |
--------------------------------------------------------------------------------
/spring-modulith-core/src/test/java/example/ni/nested/package-info.java:
--------------------------------------------------------------------------------
1 | @org.springframework.modulith.ApplicationModule
2 | package example.ni.nested;
3 |
--------------------------------------------------------------------------------
/spring-modulith-core/src/test/java/example/ni/ontype/Exposed.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2024-2025 the original author or authors.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package example.ni.ontype;
17 |
18 | /**
19 | * @author Oliver Drotbohm
20 | */
21 | public class Exposed {}
22 |
--------------------------------------------------------------------------------
/spring-modulith-core/src/test/java/example/ni/ontype/Marker.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2024-2025 the original author or authors.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package example.ni.ontype;
17 |
18 | import org.springframework.modulith.NamedInterface;
19 | import org.springframework.modulith.PackageInfo;
20 |
21 | /**
22 | * @author Oliver Drotbohm
23 | */
24 | @PackageInfo
25 | @NamedInterface
26 | class Marker {
27 |
28 | }
29 |
--------------------------------------------------------------------------------
/spring-modulith-core/src/test/java/example/ni/spi/SpiType.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2023-2025 the original author or authors.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package example.ni.spi;
17 |
18 | /**
19 | * @author Oliver Drotbohm
20 | */
21 | public interface SpiType {}
22 |
--------------------------------------------------------------------------------
/spring-modulith-core/src/test/java/example/ni/spi/package-info.java:
--------------------------------------------------------------------------------
1 | @org.springframework.modulith.NamedInterface
2 | package example.ni.spi;
3 |
--------------------------------------------------------------------------------
/spring-modulith-core/src/test/java/example/ninvalid/InvalidDefaultNamedInterface.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2023-2025 the original author or authors.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package example.ninvalid;
17 |
18 | import org.springframework.modulith.NamedInterface;
19 |
20 | /**
21 | * @author Oliver Drotbohm
22 | */
23 | @NamedInterface
24 | public interface InvalidDefaultNamedInterface {}
25 |
--------------------------------------------------------------------------------
/spring-modulith-core/src/test/java/example/springbean/internal/ServiceImplementation.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2023-2025 the original author or authors.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package example.springbean.internal;
17 |
18 | import org.springframework.stereotype.Component;
19 |
20 | /**
21 | * @author Oliver Drotbohm
22 | */
23 | @Component
24 | public class ServiceImplementation implements ServiceInterface {}
25 |
--------------------------------------------------------------------------------
/spring-modulith-core/src/test/java/example/springbean/internal/ServiceInterface.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2023-2025 the original author or authors.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package example.springbean.internal;
17 |
18 | /**
19 | * @author Oliver Drotbohm
20 | */
21 | public interface ServiceInterface {}
22 |
--------------------------------------------------------------------------------
/spring-modulith-core/src/test/java/reproducers/gh1042/module/nested/package-info.java:
--------------------------------------------------------------------------------
1 | @org.springframework.modulith.ApplicationModule(id = "gh-1042-nested", displayName = "Nested")
2 | package reproducers.gh1042.module.nested;
3 |
--------------------------------------------------------------------------------
/spring-modulith-core/src/test/java/reproducers/gh1052/Marker.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2025 the original author or authors.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package reproducers.gh1052;
17 |
18 | import org.springframework.modulith.ApplicationModule;
19 |
20 | /**
21 | * @author Oliver Drotbohm
22 | */
23 | @ApplicationModule(id = "on-marker-type")
24 | class Marker {}
25 |
--------------------------------------------------------------------------------
/spring-modulith-core/src/test/java/reproducers/gh650/first/persistence/SomeRepository.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2024-2025 the original author or authors.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package reproducers.gh650.first.persistence;
17 |
18 | /**
19 | * @author Oliver Drotbohm
20 | */
21 | public interface SomeRepository {}
22 |
--------------------------------------------------------------------------------
/spring-modulith-core/src/test/java/reproducers/gh650/first/persistence/dto/SomeDto.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2024-2025 the original author or authors.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package reproducers.gh650.first.persistence.dto;
17 |
18 | /**
19 | * @author Oliver Drotbohm
20 | */
21 | public class SomeDto {}
22 |
--------------------------------------------------------------------------------
/spring-modulith-core/src/test/java/reproducers/gh650/first/persistence/dto/package-info.java:
--------------------------------------------------------------------------------
1 | @org.springframework.modulith.NamedInterface("persistence.dto")
2 | package reproducers.gh650.first.persistence.dto;
3 |
--------------------------------------------------------------------------------
/spring-modulith-core/src/test/java/reproducers/gh650/first/persistence/package-info.java:
--------------------------------------------------------------------------------
1 | @org.springframework.modulith.NamedInterface
2 | package reproducers.gh650.first.persistence;
3 |
--------------------------------------------------------------------------------
/spring-modulith-core/src/test/java/reproducers/gh660/first/Gh660Tests.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2024-2025 the original author or authors.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package reproducers.gh660.first;
17 |
18 | import org.junit.jupiter.api.Test;
19 | import org.springframework.modulith.core.TestUtils;
20 |
21 | /**
22 | * @author Oliver Drotbohm
23 | */
24 | class Gh660Tests {
25 |
26 | @Test // GH-660
27 | void doesNotRejectInternalDependencies() {
28 | TestUtils.of("reproducers.gh660").verify();
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/spring-modulith-core/src/test/java/reproducers/gh660/first/package-info.java:
--------------------------------------------------------------------------------
1 | @org.springframework.modulith.ApplicationModule(allowedDependencies = {})
2 | package reproducers.gh660.first;
3 |
--------------------------------------------------------------------------------
/spring-modulith-core/src/test/java/reproducers/gh660/first/repository/Product.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2024-2025 the original author or authors.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package reproducers.gh660.first.repository;
17 |
18 | /**
19 | * @author Oliver Drotbohm
20 | */
21 | public class Product {}
22 |
--------------------------------------------------------------------------------
/spring-modulith-core/src/test/java/reproducers/gh660/first/repository/ProductRepository.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2024-2025 the original author or authors.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package reproducers.gh660.first.repository;
17 |
18 | /**
19 | * @author Oliver Drotbohm
20 | */
21 | public interface ProductRepository {
22 | Product save(Product product);
23 | }
24 |
--------------------------------------------------------------------------------
/spring-modulith-core/src/test/java/reproducers/gh660/first/repository/package-info.java:
--------------------------------------------------------------------------------
1 | @org.springframework.modulith.NamedInterface
2 | package reproducers.gh660.first.repository;
3 |
--------------------------------------------------------------------------------
/spring-modulith-core/src/test/java/reproducers/gh660/second/ExtendingRepository.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2024-2025 the original author or authors.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package reproducers.gh660.second;
17 |
18 | import reproducers.gh660.first.repository.ProductRepository;
19 |
20 | /**
21 | * @author Oliver Drotbohm
22 | */
23 | public interface ExtendingRepository extends ProductRepository {}
24 |
--------------------------------------------------------------------------------
/spring-modulith-core/src/test/java/reproducers/gh764/Entry.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2024-2025 the original author or authors.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package reproducers.gh764;
17 |
18 | /**
19 | * @author Oliver Drotbohm
20 | */
21 | public class Entry {}
22 |
--------------------------------------------------------------------------------
/spring-modulith-core/src/test/java/with/many/intermediate/packages/Marker.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2025 the original author or authors.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package with.many.intermediate.packages;
17 |
18 | /**
19 | * @author Oliver Drotbohm
20 | */
21 | class Marker {}
22 |
--------------------------------------------------------------------------------
/spring-modulith-core/src/test/resources/application.properties:
--------------------------------------------------------------------------------
1 | spring.main.banner-mode=OFF
2 |
--------------------------------------------------------------------------------
/spring-modulith-core/src/test/resources/detection/custom-type.properties:
--------------------------------------------------------------------------------
1 | spring.modulith.detection-strategy=org.springframework.modulith.core.ApplicationModuleDetectionStrategyLookupTests.TestStrategy
2 |
--------------------------------------------------------------------------------
/spring-modulith-core/src/test/resources/detection/direct-sub-packages.properties:
--------------------------------------------------------------------------------
1 | spring.modulith.detection-strategy=direct-sub-packages
2 |
--------------------------------------------------------------------------------
/spring-modulith-core/src/test/resources/detection/explicitly-annotated.properties:
--------------------------------------------------------------------------------
1 | spring.modulith.detection-strategy=explicitly-annotated
2 |
--------------------------------------------------------------------------------
/spring-modulith-core/src/test/resources/logback.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | %d %5p %40.40c:%4L - %m%n
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/spring-modulith-docs/src/main/java/org/springframework/modulith/docs/metadata/TypeMetadata.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2024-2025 the original author or authors.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package org.springframework.modulith.docs.metadata;
17 |
18 | import java.util.List;
19 |
20 | import org.jspecify.annotations.Nullable;
21 |
22 | /**
23 | * Metadata about a Java type.
24 | *
25 | * @author Oliver Drotbohm
26 | * @since 1.3
27 | */
28 | public record TypeMetadata(String name, @Nullable String comment, List methods) {}
29 |
--------------------------------------------------------------------------------
/spring-modulith-docs/src/main/java/org/springframework/modulith/docs/metadata/package-info.java:
--------------------------------------------------------------------------------
1 | /**
2 | * Method and type documentation metadata.
3 | *
4 | * @since 1.3
5 | */
6 | package org.springframework.modulith.docs.metadata;
7 |
--------------------------------------------------------------------------------
/spring-modulith-docs/src/main/java/org/springframework/modulith/docs/package-info.java:
--------------------------------------------------------------------------------
1 | /**
2 | * Documentation support for Spring Modulith.
3 | */
4 | @org.jspecify.annotations.NullMarked
5 | package org.springframework.modulith.docs;
6 |
--------------------------------------------------------------------------------
/spring-modulith-docs/src/main/java/org/springframework/modulith/docs/util/package-info.java:
--------------------------------------------------------------------------------
1 | /**
2 | * General utilities for the context of documentation generation.
3 | *
4 | * @since 1.3
5 | */
6 | package org.springframework.modulith.docs.util;
7 |
--------------------------------------------------------------------------------
/spring-modulith-docs/src/main/resources/META-INF/NOTICE:
--------------------------------------------------------------------------------
1 | Spring Modulith ${project.version}
2 | Copyright (c) 2021-2024 Broadcom, Inc.
3 |
4 | This product is licensed to you under the Apache License, Version 2.0
5 | (the "License"). You may not use this product except in compliance with
6 | the License.
7 |
--------------------------------------------------------------------------------
/spring-modulith-docs/src/test/resources/META-INF/spring-configuration-metadata.json:
--------------------------------------------------------------------------------
1 | {
2 | "groups": [
3 | {
4 | "name": "org.springframework.modulith.sample",
5 | "type": "com.acme.myproject.stereotypes.Stereotypes$SomeConfigurationProperties",
6 | "sourceType": "com.acme.myproject.stereotypes.Stereotypes$SomeConfigurationProperties"
7 | }
8 | ],
9 | "properties": [
10 | {
11 | "name": "org.springframework.modulith.sample.test",
12 | "type": "java.lang.Boolean",
13 | "description": "Some test property of type {@link java.lang.Boolean}.",
14 | "sourceType": "com.acme.myproject.stereotypes.Stereotypes$SomeConfigurationProperties",
15 | "defaultValue": false
16 | }
17 | ],
18 | "hints": []
19 | }
20 |
--------------------------------------------------------------------------------
/spring-modulith-docs/src/test/resources/logback.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | %d %5p %40.40c:%4L - %m%n
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/spring-modulith-events/spring-modulith-events-amqp/src/main/java/org/springframework/modulith/events/amqp/package-info.java:
--------------------------------------------------------------------------------
1 | /**
2 | * AMQP event externalization support.
3 | */
4 | @org.jspecify.annotations.NullMarked
5 | package org.springframework.modulith.events.amqp;
6 |
--------------------------------------------------------------------------------
/spring-modulith-events/spring-modulith-events-amqp/src/main/resources/META-INF/NOTICE:
--------------------------------------------------------------------------------
1 | Spring Modulith ${project.version}
2 | Copyright (c) 2021-2024 Broadcom, Inc.
3 |
4 | This product is licensed to you under the Apache License, Version 2.0
5 | (the "License"). You may not use this product except in compliance with
6 | the License.
7 |
--------------------------------------------------------------------------------
/spring-modulith-events/spring-modulith-events-amqp/src/main/resources/META-INF/spring-configuration-metadata.json:
--------------------------------------------------------------------------------
1 | {
2 | "properties": [
3 | {
4 | "name": "spring.modulith.events.rabbitmq.enable-json",
5 | "type": "java.lang.Boolean",
6 | "description": "Whether to auto-configure RabbitTemplate to use JSON for message serialization.",
7 | "defaultValue": "true"
8 | }
9 | ]
10 | }
11 |
--------------------------------------------------------------------------------
/spring-modulith-events/spring-modulith-events-amqp/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports:
--------------------------------------------------------------------------------
1 | org.springframework.modulith.events.amqp.RabbitEventExternalizerConfiguration
2 | org.springframework.modulith.events.amqp.RabbitJacksonConfiguration
3 |
--------------------------------------------------------------------------------
/spring-modulith-events/spring-modulith-events-amqp/src/test/resources/application.properties:
--------------------------------------------------------------------------------
1 | spring.artemis.embedded.topics=target
2 | spring.modulith.events.jdbc.schema-initialization.enabled=true
3 |
--------------------------------------------------------------------------------
/spring-modulith-events/spring-modulith-events-amqp/src/test/resources/logback.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/spring-modulith-events/spring-modulith-events-api/src/main/java/org/springframework/modulith/events/package-info.java:
--------------------------------------------------------------------------------
1 | /**
2 | * API of the event publication registry abstraction.
3 | */
4 | @org.jspecify.annotations.NullMarked
5 | package org.springframework.modulith.events;
6 |
--------------------------------------------------------------------------------
/spring-modulith-events/spring-modulith-events-api/src/main/resources/META-INF/NOTICE:
--------------------------------------------------------------------------------
1 | Spring Modulith ${project.version}
2 | Copyright (c) 2021-2024 Broadcom, Inc.
3 |
4 | This product is licensed to you under the Apache License, Version 2.0
5 | (the "License"). You may not use this product except in compliance with
6 | the License.
7 |
--------------------------------------------------------------------------------
/spring-modulith-events/spring-modulith-events-api/src/test/resources/logback.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | %d{HH:mm:ss.SSS} %1.-1level - %8.8t : %m%n
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/spring-modulith-events/spring-modulith-events-core/src/main/java/org/springframework/modulith/events/aot/package-info.java:
--------------------------------------------------------------------------------
1 | /**
2 | * AOT support for the Event Publication Registry.
3 | */
4 | @org.jspecify.annotations.NullMarked
5 | package org.springframework.modulith.events.aot;
6 |
--------------------------------------------------------------------------------
/spring-modulith-events/spring-modulith-events-core/src/main/java/org/springframework/modulith/events/config/EventPublicationConfigurationExtension.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2017-2025 the original author or authors.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package org.springframework.modulith.events.config;
17 |
18 | /**
19 | * @author Oliver Drotbohm
20 | */
21 | public interface EventPublicationConfigurationExtension {}
22 |
--------------------------------------------------------------------------------
/spring-modulith-events/spring-modulith-events-core/src/main/java/org/springframework/modulith/events/config/EventSerializationConfigurationExtension.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2017-2025 the original author or authors.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package org.springframework.modulith.events.config;
17 |
18 | /**
19 | * @author Oliver Drotbohm
20 | */
21 | public interface EventSerializationConfigurationExtension {}
22 |
--------------------------------------------------------------------------------
/spring-modulith-events/spring-modulith-events-core/src/main/java/org/springframework/modulith/events/config/package-info.java:
--------------------------------------------------------------------------------
1 | /**
2 | * Spring configuration for the Event Publication Registry.
3 | */
4 | @org.jspecify.annotations.NullMarked
5 | package org.springframework.modulith.events.config;
6 |
--------------------------------------------------------------------------------
/spring-modulith-events/spring-modulith-events-core/src/main/java/org/springframework/modulith/events/core/package-info.java:
--------------------------------------------------------------------------------
1 | /**
2 | * The event publication registry abstraction.
3 | */
4 | @org.jspecify.annotations.NullMarked
5 | package org.springframework.modulith.events.core;
6 |
--------------------------------------------------------------------------------
/spring-modulith-events/spring-modulith-events-core/src/main/java/org/springframework/modulith/events/support/package-info.java:
--------------------------------------------------------------------------------
1 | /**
2 | * Spring Framework extensions to integrate the event publication registry.
3 | */
4 | @org.jspecify.annotations.NullMarked
5 | package org.springframework.modulith.events.support;
6 |
--------------------------------------------------------------------------------
/spring-modulith-events/spring-modulith-events-core/src/main/resources/META-INF/NOTICE:
--------------------------------------------------------------------------------
1 | Spring Modulith ${project.version}
2 | Copyright (c) 2021-2024 Broadcom, Inc.
3 |
4 | This product is licensed to you under the Apache License, Version 2.0
5 | (the "License"). You may not use this product except in compliance with
6 | the License.
7 |
--------------------------------------------------------------------------------
/spring-modulith-events/spring-modulith-events-core/src/main/resources/META-INF/spring/aot.factories:
--------------------------------------------------------------------------------
1 | org.springframework.beans.factory.aot.BeanRegistrationAotProcessor=\
2 | org.springframework.modulith.events.aot.TransactionalEventListenerAotProcessor
3 | org.springframework.aot.hint.RuntimeHintsRegistrar=\
4 | org.springframework.modulith.events.aot.ApplicationListenerMethodAdapterRuntimeHints
5 |
--------------------------------------------------------------------------------
/spring-modulith-events/spring-modulith-events-core/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports:
--------------------------------------------------------------------------------
1 | org.springframework.modulith.events.config.EventPublicationAutoConfiguration
2 | org.springframework.modulith.events.config.EventExternalizationAutoConfiguration
3 |
--------------------------------------------------------------------------------
/spring-modulith-events/spring-modulith-events-core/src/test/resources/logback.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | %d %5p %40.40c:%4L - %m%n
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/spring-modulith-events/spring-modulith-events-jackson/src/main/java/org/springframework/modulith/events/jackson/package-info.java:
--------------------------------------------------------------------------------
1 | /**
2 | * A Jackson based implementation of the {@link org.springframework.modulith.events.core.EventSerializer}.
3 | */
4 | @org.jspecify.annotations.NullMarked
5 | package org.springframework.modulith.events.jackson;
6 |
--------------------------------------------------------------------------------
/spring-modulith-events/spring-modulith-events-jackson/src/main/resources/META-INF/NOTICE:
--------------------------------------------------------------------------------
1 | Spring Modulith ${project.version}
2 | Copyright (c) 2021-2024 Broadcom, Inc.
3 |
4 | This product is licensed to you under the Apache License, Version 2.0
5 | (the "License"). You may not use this product except in compliance with
6 | the License.
7 |
--------------------------------------------------------------------------------
/spring-modulith-events/spring-modulith-events-jackson/src/main/resources/META-INF/spring.factories:
--------------------------------------------------------------------------------
1 | org.springframework.modulith.events.config.EventSerializationConfigurationExtension=\
2 | org.springframework.modulith.events.jackson.JacksonEventSerializationConfiguration
3 |
4 | org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
5 | org.springframework.modulith.events.jackson.JacksonEventSerializationConfiguration
6 |
--------------------------------------------------------------------------------
/spring-modulith-events/spring-modulith-events-jackson/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports:
--------------------------------------------------------------------------------
1 | org.springframework.modulith.events.jackson.JacksonEventSerializationConfiguration
2 |
--------------------------------------------------------------------------------
/spring-modulith-events/spring-modulith-events-jdbc/src/main/java/org/springframework/modulith/events/jdbc/package-info.java:
--------------------------------------------------------------------------------
1 | /**
2 | * JDBC integration for {@link org.springframework.modulith.events.core.EventPublicationRepository}.
3 | */
4 | @org.jspecify.annotations.NullMarked
5 | package org.springframework.modulith.events.jdbc;
6 |
--------------------------------------------------------------------------------
/spring-modulith-events/spring-modulith-events-jdbc/src/main/resources/META-INF/NOTICE:
--------------------------------------------------------------------------------
1 | Spring Modulith ${project.version}
2 | Copyright (c) 2021-2024 Broadcom, Inc.
3 |
4 | This product is licensed to you under the Apache License, Version 2.0
5 | (the "License"). You may not use this product except in compliance with
6 | the License.
7 |
--------------------------------------------------------------------------------
/spring-modulith-events/spring-modulith-events-jdbc/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports:
--------------------------------------------------------------------------------
1 | org.springframework.modulith.events.jdbc.JdbcEventPublicationAutoConfiguration
2 |
--------------------------------------------------------------------------------
/spring-modulith-events/spring-modulith-events-jdbc/src/main/resources/schema-h2-archive.sql:
--------------------------------------------------------------------------------
1 | CREATE TABLE IF NOT EXISTS EVENT_PUBLICATION_ARCHIVE
2 | (
3 | ID UUID NOT NULL,
4 | COMPLETION_DATE TIMESTAMP(9) WITH TIME ZONE,
5 | EVENT_TYPE VARCHAR(512) NOT NULL,
6 | LISTENER_ID VARCHAR(512) NOT NULL,
7 | PUBLICATION_DATE TIMESTAMP(9) WITH TIME ZONE NOT NULL,
8 | SERIALIZED_EVENT VARCHAR(4000) NOT NULL,
9 | PRIMARY KEY (ID)
10 | );
11 | CREATE INDEX IF NOT EXISTS EVENT_PUBLICATION_ARCHIVE_BY_LISTENER_ID_AND_SERIALIZED_EVENT_IDX ON EVENT_PUBLICATION_ARCHIVE (LISTENER_ID, SERIALIZED_EVENT);
12 | CREATE INDEX IF NOT EXISTS EVENT_PUBLICATION_ARCHIVE_BY_COMPLETION_DATE_IDX ON EVENT_PUBLICATION_ARCHIVE (COMPLETION_DATE);
13 |
--------------------------------------------------------------------------------
/spring-modulith-events/spring-modulith-events-jdbc/src/main/resources/schema-h2.sql:
--------------------------------------------------------------------------------
1 | CREATE TABLE IF NOT EXISTS EVENT_PUBLICATION
2 | (
3 | ID UUID NOT NULL,
4 | COMPLETION_DATE TIMESTAMP(9) WITH TIME ZONE,
5 | EVENT_TYPE VARCHAR(512) NOT NULL,
6 | LISTENER_ID VARCHAR(512) NOT NULL,
7 | PUBLICATION_DATE TIMESTAMP(9) WITH TIME ZONE NOT NULL,
8 | SERIALIZED_EVENT VARCHAR(4000) NOT NULL,
9 | PRIMARY KEY (ID)
10 | );
11 | CREATE INDEX IF NOT EXISTS EVENT_PUBLICATION_BY_LISTENER_ID_AND_SERIALIZED_EVENT_IDX ON EVENT_PUBLICATION (LISTENER_ID, SERIALIZED_EVENT);
12 | CREATE INDEX IF NOT EXISTS EVENT_PUBLICATION_BY_COMPLETION_DATE_IDX ON EVENT_PUBLICATION (COMPLETION_DATE);
13 |
--------------------------------------------------------------------------------
/spring-modulith-events/spring-modulith-events-jdbc/src/main/resources/schema-hsqldb-archive.sql:
--------------------------------------------------------------------------------
1 | CREATE TABLE IF NOT EXISTS EVENT_PUBLICATION_ARCHIVE
2 | (
3 | ID UUID NOT NULL,
4 | COMPLETION_DATE TIMESTAMP(9),
5 | EVENT_TYPE VARCHAR(512) NOT NULL,
6 | LISTENER_ID VARCHAR(512) NOT NULL,
7 | PUBLICATION_DATE TIMESTAMP(9) NOT NULL,
8 | SERIALIZED_EVENT VARCHAR(4000) NOT NULL,
9 | PRIMARY KEY (ID)
10 | );
11 | CREATE INDEX IF NOT EXISTS EVENT_PUBLICATION_ARCHIVE_BY_LISTENER_ID_AND_SERIALIZED_EVENT_IDX ON EVENT_PUBLICATION_ARCHIVE (LISTENER_ID, SERIALIZED_EVENT);
12 | CREATE INDEX IF NOT EXISTS EVENT_PUBLICATION_ARCHIVE_BY_COMPLETION_DATE_IDX ON EVENT_PUBLICATION_ARCHIVE (COMPLETION_DATE);
13 |
--------------------------------------------------------------------------------
/spring-modulith-events/spring-modulith-events-jdbc/src/main/resources/schema-hsqldb.sql:
--------------------------------------------------------------------------------
1 | CREATE TABLE IF NOT EXISTS EVENT_PUBLICATION
2 | (
3 | ID UUID NOT NULL,
4 | COMPLETION_DATE TIMESTAMP(9),
5 | EVENT_TYPE VARCHAR(512) NOT NULL,
6 | LISTENER_ID VARCHAR(512) NOT NULL,
7 | PUBLICATION_DATE TIMESTAMP(9) NOT NULL,
8 | SERIALIZED_EVENT VARCHAR(4000) NOT NULL,
9 | PRIMARY KEY (ID)
10 | );
11 | CREATE INDEX IF NOT EXISTS EVENT_PUBLICATION_BY_LISTENER_ID_AND_SERIALIZED_EVENT_IDX ON EVENT_PUBLICATION (LISTENER_ID, SERIALIZED_EVENT);
12 | CREATE INDEX IF NOT EXISTS EVENT_PUBLICATION_BY_COMPLETION_DATE_IDX ON EVENT_PUBLICATION (COMPLETION_DATE);
13 |
--------------------------------------------------------------------------------
/spring-modulith-events/spring-modulith-events-jdbc/src/main/resources/schema-mariadb-archive.sql:
--------------------------------------------------------------------------------
1 | CREATE TABLE IF NOT EXISTS EVENT_PUBLICATION_ARCHIVE
2 | (
3 | ID VARCHAR(36) NOT NULL,
4 | LISTENER_ID VARCHAR(512) NOT NULL,
5 | EVENT_TYPE VARCHAR(512) NOT NULL,
6 | SERIALIZED_EVENT VARCHAR(4000) NOT NULL,
7 | PUBLICATION_DATE TIMESTAMP(6) NOT NULL,
8 | COMPLETION_DATE TIMESTAMP(6) DEFAULT NULL NULL,
9 | PRIMARY KEY (ID),
10 | INDEX EVENT_PUBLICATION_ARCHIVE_BY_COMPLETION_DATE_IDX (COMPLETION_DATE)
11 | );
12 |
--------------------------------------------------------------------------------
/spring-modulith-events/spring-modulith-events-jdbc/src/main/resources/schema-mariadb.sql:
--------------------------------------------------------------------------------
1 | CREATE TABLE IF NOT EXISTS EVENT_PUBLICATION
2 | (
3 | ID VARCHAR(36) NOT NULL,
4 | LISTENER_ID VARCHAR(512) NOT NULL,
5 | EVENT_TYPE VARCHAR(512) NOT NULL,
6 | SERIALIZED_EVENT VARCHAR(4000) NOT NULL,
7 | PUBLICATION_DATE TIMESTAMP(6) NOT NULL,
8 | COMPLETION_DATE TIMESTAMP(6) DEFAULT NULL NULL,
9 | PRIMARY KEY (ID),
10 | INDEX EVENT_PUBLICATION_BY_COMPLETION_DATE_IDX (COMPLETION_DATE)
11 | );
12 |
--------------------------------------------------------------------------------
/spring-modulith-events/spring-modulith-events-jdbc/src/main/resources/schema-mysql-archive.sql:
--------------------------------------------------------------------------------
1 | CREATE TABLE IF NOT EXISTS EVENT_PUBLICATION_ARCHIVE
2 | (
3 | ID VARCHAR(36) NOT NULL,
4 | LISTENER_ID VARCHAR(512) NOT NULL,
5 | EVENT_TYPE VARCHAR(512) NOT NULL,
6 | SERIALIZED_EVENT VARCHAR(4000) NOT NULL,
7 | PUBLICATION_DATE TIMESTAMP(6) NOT NULL,
8 | COMPLETION_DATE TIMESTAMP(6) DEFAULT NULL NULL,
9 | PRIMARY KEY (ID),
10 | INDEX EVENT_PUBLICATION_ARCHIVE_BY_COMPLETION_DATE_IDX (COMPLETION_DATE)
11 | );
12 |
--------------------------------------------------------------------------------
/spring-modulith-events/spring-modulith-events-jdbc/src/main/resources/schema-mysql.sql:
--------------------------------------------------------------------------------
1 | CREATE TABLE IF NOT EXISTS EVENT_PUBLICATION
2 | (
3 | ID VARCHAR(36) NOT NULL,
4 | LISTENER_ID VARCHAR(512) NOT NULL,
5 | EVENT_TYPE VARCHAR(512) NOT NULL,
6 | SERIALIZED_EVENT VARCHAR(4000) NOT NULL,
7 | PUBLICATION_DATE TIMESTAMP(6) NOT NULL,
8 | COMPLETION_DATE TIMESTAMP(6) DEFAULT NULL NULL,
9 | PRIMARY KEY (ID),
10 | INDEX EVENT_PUBLICATION_BY_COMPLETION_DATE_IDX (COMPLETION_DATE)
11 | );
12 |
--------------------------------------------------------------------------------
/spring-modulith-events/spring-modulith-events-jdbc/src/main/resources/schema-oracle-archive.sql:
--------------------------------------------------------------------------------
1 | -- oracle database support 'create xx if not exists' from 23c, lower version should create table and index manually
2 | CREATE TABLE IF NOT EXISTS EVENT_PUBLICATION_ARCHIVE (
3 | ID VARCHAR2(36) NOT NULL,
4 | LISTENER_ID VARCHAR2(512) NOT NULL,
5 | EVENT_TYPE VARCHAR2(512) NOT NULL,
6 | SERIALIZED_EVENT VARCHAR2(4000) NOT NULL,
7 | PUBLICATION_DATE TIMESTAMP(6) NOT NULL,
8 | COMPLETION_DATE TIMESTAMP(6),
9 | CONSTRAINT EVENT_PUBLICATION_ARCHIVE_PK PRIMARY KEY(ID)
10 | );
11 | CREATE INDEX IF NOT EXISTS EVENT_PUBLICATION_ARCHIVE_BY_LISTENER_ID_AND_SERIALIZED_EVENT_IDX ON EVENT_PUBLICATION_ARCHIVE (LISTENER_ID, SERIALIZED_EVENT);
12 | CREATE INDEX IF NOT EXISTS EVENT_PUBLICATION_ARCHIVE_BY_COMPLETION_DATE_IDX ON EVENT_PUBLICATION_ARCHIVE (COMPLETION_DATE);
13 |
--------------------------------------------------------------------------------
/spring-modulith-events/spring-modulith-events-jdbc/src/main/resources/schema-oracle.sql:
--------------------------------------------------------------------------------
1 | -- oracle database support 'create xx if not exists' from 23c, lower version should create table and index manually
2 | CREATE TABLE IF NOT EXISTS EVENT_PUBLICATION (
3 | ID VARCHAR2(36) NOT NULL,
4 | LISTENER_ID VARCHAR2(512) NOT NULL,
5 | EVENT_TYPE VARCHAR2(512) NOT NULL,
6 | SERIALIZED_EVENT VARCHAR2(4000) NOT NULL,
7 | PUBLICATION_DATE TIMESTAMP(6) NOT NULL,
8 | COMPLETION_DATE TIMESTAMP(6),
9 | CONSTRAINT EVENT_PUBLICATION_PK PRIMARY KEY(ID)
10 | );
11 | CREATE INDEX IF NOT EXISTS EVENT_PUBLICATION_BY_LISTENER_ID_AND_SERIALIZED_EVENT_IDX ON EVENT_PUBLICATION (LISTENER_ID, SERIALIZED_EVENT);
12 | CREATE INDEX IF NOT EXISTS EVENT_PUBLICATION_BY_COMPLETION_DATE_IDX ON EVENT_PUBLICATION (COMPLETION_DATE);
13 |
--------------------------------------------------------------------------------
/spring-modulith-events/spring-modulith-events-jdbc/src/main/resources/schema-postgresql-archive.sql:
--------------------------------------------------------------------------------
1 | CREATE TABLE IF NOT EXISTS event_publication_archive
2 | (
3 | id UUID NOT NULL,
4 | listener_id TEXT NOT NULL,
5 | event_type TEXT NOT NULL,
6 | serialized_event TEXT NOT NULL,
7 | publication_date TIMESTAMP WITH TIME ZONE NOT NULL,
8 | completion_date TIMESTAMP WITH TIME ZONE,
9 | PRIMARY KEY (id)
10 | );
11 | CREATE INDEX IF NOT EXISTS event_publication_archive_serialized_event_hash_idx ON event_publication_archive USING hash(serialized_event);
12 | CREATE INDEX IF NOT EXISTS event_publication_archive_by_completion_date_idx ON event_publication_archive (completion_date);
13 |
--------------------------------------------------------------------------------
/spring-modulith-events/spring-modulith-events-jdbc/src/main/resources/schema-postgresql.sql:
--------------------------------------------------------------------------------
1 | CREATE TABLE IF NOT EXISTS event_publication
2 | (
3 | id UUID NOT NULL,
4 | listener_id TEXT NOT NULL,
5 | event_type TEXT NOT NULL,
6 | serialized_event TEXT NOT NULL,
7 | publication_date TIMESTAMP WITH TIME ZONE NOT NULL,
8 | completion_date TIMESTAMP WITH TIME ZONE,
9 | PRIMARY KEY (id)
10 | );
11 | CREATE INDEX IF NOT EXISTS event_publication_serialized_event_hash_idx ON event_publication USING hash(serialized_event);
12 | CREATE INDEX IF NOT EXISTS event_publication_by_completion_date_idx ON event_publication (completion_date);
13 |
--------------------------------------------------------------------------------
/spring-modulith-events/spring-modulith-events-jdbc/src/main/resources/schema-sqlserver-archive.sql:
--------------------------------------------------------------------------------
1 | IF NOT EXISTS(SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'EVENT_PUBLICATION_ARCHIVE')
2 | CREATE TABLE EVENT_PUBLICATION_ARCHIVE
3 | (
4 | ID VARCHAR(36) NOT NULL,
5 | LISTENER_ID VARCHAR(512) NOT NULL,
6 | EVENT_TYPE VARCHAR(512) NOT NULL,
7 | SERIALIZED_EVENT VARCHAR(MAX) NOT NULL,
8 | PUBLICATION_DATE DATETIME2(6) NOT NULL,
9 | COMPLETION_DATE DATETIME2(6) NULL,
10 | PRIMARY KEY (ID),
11 | INDEX EVENT_PUBLICATION_ARCHIVE_BY_COMPLETION_DATE_IDX (COMPLETION_DATE)
12 | );
--------------------------------------------------------------------------------
/spring-modulith-events/spring-modulith-events-jdbc/src/main/resources/schema-sqlserver.sql:
--------------------------------------------------------------------------------
1 | IF NOT EXISTS(SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'EVENT_PUBLICATION')
2 | CREATE TABLE EVENT_PUBLICATION
3 | (
4 | ID VARCHAR(36) NOT NULL,
5 | LISTENER_ID VARCHAR(512) NOT NULL,
6 | EVENT_TYPE VARCHAR(512) NOT NULL,
7 | SERIALIZED_EVENT VARCHAR(MAX) NOT NULL,
8 | PUBLICATION_DATE DATETIME2(6) NOT NULL,
9 | COMPLETION_DATE DATETIME2(6) NULL,
10 | PRIMARY KEY (ID),
11 | INDEX EVENT_PUBLICATION_BY_COMPLETION_DATE_IDX (COMPLETION_DATE)
12 | );
13 |
--------------------------------------------------------------------------------
/spring-modulith-events/spring-modulith-events-jdbc/src/test/java/org/springframework/modulith/testapp/TestApplication.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2022-2025 the original author or authors.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package org.springframework.modulith.testapp;
17 |
18 | import org.springframework.boot.autoconfigure.SpringBootApplication;
19 |
20 | /**
21 | * @author Dmitry Belyaev, Björn Kieling
22 | */
23 | @SpringBootApplication
24 | public class TestApplication {
25 | }
26 |
--------------------------------------------------------------------------------
/spring-modulith-events/spring-modulith-events-jdbc/src/test/resources/application-h2.properties:
--------------------------------------------------------------------------------
1 | spring.datasource.driverClassName=org.h2.Driver
2 | spring.datasource.url=jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1
3 |
--------------------------------------------------------------------------------
/spring-modulith-events/spring-modulith-events-jdbc/src/test/resources/application-hsqldb.properties:
--------------------------------------------------------------------------------
1 | spring.datasource.driverClassName=org.hsqldb.jdbc.JDBCDriver
2 | spring.datasource.url=jdbc:hsqldb:mem:testdb;DB_CLOSE_DELAY=-1
3 |
--------------------------------------------------------------------------------
/spring-modulith-events/spring-modulith-events-jdbc/src/test/resources/application-mariadb.properties:
--------------------------------------------------------------------------------
1 | spring.datasource.url=jdbc:tc:mariadb:11.5.2:///events
2 | spring.datasource.driverClassName=org.testcontainers.jdbc.ContainerDatabaseDriver
3 |
--------------------------------------------------------------------------------
/spring-modulith-events/spring-modulith-events-jdbc/src/test/resources/application-mssql.properties:
--------------------------------------------------------------------------------
1 | spring.datasource.url=jdbc:tc:sqlserver:2022-latest:///events;encrypt=false
2 | spring.datasource.driverClassName=org.testcontainers.jdbc.ContainerDatabaseDriver
3 |
--------------------------------------------------------------------------------
/spring-modulith-events/spring-modulith-events-jdbc/src/test/resources/application-mysql.properties:
--------------------------------------------------------------------------------
1 | spring.datasource.url=jdbc:tc:mysql:8.0.30:///events
2 | spring.datasource.driverClassName=org.testcontainers.jdbc.ContainerDatabaseDriver
3 |
--------------------------------------------------------------------------------
/spring-modulith-events/spring-modulith-events-jdbc/src/test/resources/application-oracle.properties:
--------------------------------------------------------------------------------
1 | spring.datasource.url=jdbc:tc:oracle:23-slim-faststart:///events
2 | spring.datasource.driverClassName=org.testcontainers.jdbc.ContainerDatabaseDriver
3 |
--------------------------------------------------------------------------------
/spring-modulith-events/spring-modulith-events-jdbc/src/test/resources/application-postgres.properties:
--------------------------------------------------------------------------------
1 | spring.datasource.url=jdbc:tc:postgresql:13.2:////postgres
2 | spring.datasource.driverClassName=org.testcontainers.jdbc.ContainerDatabaseDriver
3 |
--------------------------------------------------------------------------------
/spring-modulith-events/spring-modulith-events-jdbc/src/test/resources/application.properties:
--------------------------------------------------------------------------------
1 | spring.main.banner-mode=OFF
2 | spring.test.database.replace=NONE
3 |
--------------------------------------------------------------------------------
/spring-modulith-events/spring-modulith-events-jdbc/src/test/resources/container-license-acceptance.txt:
--------------------------------------------------------------------------------
1 | mcr.microsoft.com/mssql/server:2022-latest
2 |
--------------------------------------------------------------------------------
/spring-modulith-events/spring-modulith-events-jdbc/src/test/resources/logback.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | %d %5p %40.40c:%4L - %m%n
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/spring-modulith-events/spring-modulith-events-jms/src/main/java/org/springframework/modulith/events/jms/package-info.java:
--------------------------------------------------------------------------------
1 | /**
2 | * JMS event externalization support.
3 | */
4 | @org.jspecify.annotations.NullMarked
5 | package org.springframework.modulith.events.jms;
6 |
--------------------------------------------------------------------------------
/spring-modulith-events/spring-modulith-events-jms/src/main/resources/META-INF/NOTICE:
--------------------------------------------------------------------------------
1 | Spring Modulith ${project.version}
2 | Copyright (c) 2021-2024 Broadcom, Inc.
3 |
4 | This product is licensed to you under the Apache License, Version 2.0
5 | (the "License"). You may not use this product except in compliance with
6 | the License.
7 |
--------------------------------------------------------------------------------
/spring-modulith-events/spring-modulith-events-jms/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports:
--------------------------------------------------------------------------------
1 | org.springframework.modulith.events.jms.JmsEventExternalizerConfiguration
2 |
--------------------------------------------------------------------------------
/spring-modulith-events/spring-modulith-events-jms/src/test/resources/application.properties:
--------------------------------------------------------------------------------
1 | spring.modulith.events.jdbc.schema-initialization.enabled=true
2 |
--------------------------------------------------------------------------------
/spring-modulith-events/spring-modulith-events-jms/src/test/resources/logback.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/spring-modulith-events/spring-modulith-events-jpa/src/main/java/org/springframework/modulith/events/jpa/archiving/package-info.java:
--------------------------------------------------------------------------------
1 | /**
2 | * JPA integration for {@link org.springframework.modulith.events.core.EventPublicationRepository}.
3 | */
4 | @org.jspecify.annotations.NullMarked
5 | package org.springframework.modulith.events.jpa.archiving;
6 |
--------------------------------------------------------------------------------
/spring-modulith-events/spring-modulith-events-jpa/src/main/java/org/springframework/modulith/events/jpa/package-info.java:
--------------------------------------------------------------------------------
1 | /**
2 | * JPA integration for {@link org.springframework.modulith.events.core.EventPublicationRepository}.
3 | */
4 | @org.jspecify.annotations.NullMarked
5 | package org.springframework.modulith.events.jpa;
6 |
--------------------------------------------------------------------------------
/spring-modulith-events/spring-modulith-events-jpa/src/main/java/org/springframework/modulith/events/jpa/updating/package-info.java:
--------------------------------------------------------------------------------
1 | /**
2 | * JPA integration for {@link org.springframework.modulith.events.core.EventPublicationRepository}.
3 | */
4 | @org.jspecify.annotations.NullMarked
5 | package org.springframework.modulith.events.jpa.updating;
6 |
--------------------------------------------------------------------------------
/spring-modulith-events/spring-modulith-events-jpa/src/main/resources/META-INF/NOTICE:
--------------------------------------------------------------------------------
1 | Spring Modulith ${project.version}
2 | Copyright (c) 2021-2024 Broadcom, Inc.
3 |
4 | This product is licensed to you under the Apache License, Version 2.0
5 | (the "License"). You may not use this product except in compliance with
6 | the License.
7 |
--------------------------------------------------------------------------------
/spring-modulith-events/spring-modulith-events-jpa/src/main/resources/META-INF/spring-devtools.properties:
--------------------------------------------------------------------------------
1 | restart.include.spring-modulith-events:/spring-modulith-events-jpa-[\\w-\\.]+\.jar
2 |
--------------------------------------------------------------------------------
/spring-modulith-events/spring-modulith-events-jpa/src/main/resources/META-INF/spring.factories:
--------------------------------------------------------------------------------
1 | org.springframework.modulith.events.config.EventPublicationConfigurationExtension=\
2 | org.springframework.modulith.events.jpa.JpaEventPublicationConfiguration
3 |
4 | org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
5 | org.springframework.modulith.events.jpa.JpaEventPublicationAutoConfiguration,\
6 | org.springframework.modulith.events.jpa.JpaEventPublicationConfiguration
7 |
--------------------------------------------------------------------------------
/spring-modulith-events/spring-modulith-events-jpa/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports:
--------------------------------------------------------------------------------
1 | org.springframework.modulith.events.jpa.JpaEventPublicationAutoConfiguration
2 | org.springframework.modulith.events.jpa.archiving.ArchivingAutoConfiguration
3 |
--------------------------------------------------------------------------------
/spring-modulith-events/spring-modulith-events-jpa/src/test/java/example/ExampleApplication.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2022-2025 the original author or authors.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package example;
17 |
18 | import org.springframework.boot.autoconfigure.SpringBootApplication;
19 |
20 | /**
21 | * @author Oliver Drotbohm
22 | */
23 | @SpringBootApplication
24 | public class ExampleApplication {}
25 |
--------------------------------------------------------------------------------
/spring-modulith-events/spring-modulith-events-jpa/src/test/resources/logback.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | %d %5p %40.40c:%4L - %m%n
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/spring-modulith-events/spring-modulith-events-kafka/src/main/java/org/springframework/modulith/events/kafka/package-info.java:
--------------------------------------------------------------------------------
1 | /**
2 | * Kafka event externalization support.
3 | */
4 | @org.jspecify.annotations.NullMarked
5 | package org.springframework.modulith.events.kafka;
6 |
--------------------------------------------------------------------------------
/spring-modulith-events/spring-modulith-events-kafka/src/main/resources/META-INF/NOTICE:
--------------------------------------------------------------------------------
1 | Spring Modulith ${project.version}
2 | Copyright (c) 2021-2024 Broadcom, Inc.
3 |
4 | This product is licensed to you under the Apache License, Version 2.0
5 | (the "License"). You may not use this product except in compliance with
6 | the License.
7 |
--------------------------------------------------------------------------------
/spring-modulith-events/spring-modulith-events-kafka/src/main/resources/META-INF/spring-configuration-metadata.json:
--------------------------------------------------------------------------------
1 | {
2 | "properties": [
3 | {
4 | "name": "spring.modulith.events.kafka.enable-json",
5 | "type": "java.lang.Boolean",
6 | "description": "Whether to auto-configure Spring for Apache Kafka to use JSON for message serialization.",
7 | "defaultValue": "true"
8 | }
9 | ]
10 | }
11 |
--------------------------------------------------------------------------------
/spring-modulith-events/spring-modulith-events-kafka/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports:
--------------------------------------------------------------------------------
1 | org.springframework.modulith.events.kafka.KafkaEventExternalizerConfiguration
2 | org.springframework.modulith.events.kafka.KafkaJacksonConfiguration
3 |
--------------------------------------------------------------------------------
/spring-modulith-events/spring-modulith-events-kafka/src/main/resources/kafka-json.properties:
--------------------------------------------------------------------------------
1 | spring.kafka.producer.value-serializer=org.apache.kafka.common.serialization.ByteArraySerializer
2 | spring.kafka.consumer.value-deserializer=org.apache.kafka.common.serialization.ByteArrayDeserializer
3 |
--------------------------------------------------------------------------------
/spring-modulith-events/spring-modulith-events-messaging/src/main/java/org/springframework/modulith/events/messaging/package-info.java:
--------------------------------------------------------------------------------
1 | /**
2 | * Messaging event externalization support.
3 | */
4 | @org.jspecify.annotations.NullMarked
5 | package org.springframework.modulith.events.messaging;
6 |
--------------------------------------------------------------------------------
/spring-modulith-events/spring-modulith-events-messaging/src/main/resources/META-INF/NOTICE:
--------------------------------------------------------------------------------
1 | Spring Modulith ${project.version}
2 | Copyright (c) 2021-2024 Broadcom, Inc.
3 |
4 | This product is licensed to you under the Apache License, Version 2.0
5 | (the "License"). You may not use this product except in compliance with
6 | the License.
7 |
--------------------------------------------------------------------------------
/spring-modulith-events/spring-modulith-events-messaging/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports:
--------------------------------------------------------------------------------
1 | org.springframework.modulith.events.messaging.SpringMessagingEventExternalizerConfiguration
2 |
--------------------------------------------------------------------------------
/spring-modulith-events/spring-modulith-events-messaging/src/test/resources/application.properties:
--------------------------------------------------------------------------------
1 | spring.modulith.events.jdbc.schema-initialization.enabled=true
2 | spring.main.banner-mode=OFF
3 |
--------------------------------------------------------------------------------
/spring-modulith-events/spring-modulith-events-messaging/src/test/resources/logback.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/spring-modulith-events/spring-modulith-events-mongodb/src/main/java/org/springframework/modulith/events/mongodb/package-info.java:
--------------------------------------------------------------------------------
1 | /**
2 | * MongoDB integration for {@link org.springframework.modulith.events.core.EventPublicationRepository}.
3 | */
4 | @org.jspecify.annotations.NullMarked
5 | package org.springframework.modulith.events.mongodb;
6 |
--------------------------------------------------------------------------------
/spring-modulith-events/spring-modulith-events-mongodb/src/main/resources/META-INF/NOTICE:
--------------------------------------------------------------------------------
1 | Spring Modulith ${project.version}
2 | Copyright (c) 2021-2024 Broadcom, Inc.
3 |
4 | This product is licensed to you under the Apache License, Version 2.0
5 | (the "License"). You may not use this product except in compliance with
6 | the License.
7 |
--------------------------------------------------------------------------------
/spring-modulith-events/spring-modulith-events-mongodb/src/main/resources/META-INF/spring-configuration-metadata.json:
--------------------------------------------------------------------------------
1 | {
2 | "properties": [
3 | {
4 | "name": "spring.modulith.events.mongodb.transaction-management.enabled",
5 | "type": "java.lang.Boolean",
6 | "description": "Whether to automatically enable transactions for MongoDB. Requires the database to be run with a replica set.",
7 | "defaultValue": "true"
8 | }
9 | ]
10 | }
11 |
--------------------------------------------------------------------------------
/spring-modulith-events/spring-modulith-events-mongodb/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports:
--------------------------------------------------------------------------------
1 | org.springframework.modulith.events.mongodb.MongoDbEventPublicationAutoConfiguration
2 | org.springframework.modulith.events.mongodb.MongoDbTransactionAutoConfiguration
3 |
--------------------------------------------------------------------------------
/spring-modulith-events/spring-modulith-events-mongodb/src/test/java/org/springframework/modulith/testapp/TestApplication.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2022-2025 the original author or authors.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package org.springframework.modulith.testapp;
17 |
18 | import org.springframework.boot.autoconfigure.SpringBootApplication;
19 |
20 | /**
21 | * @author Dmitry Belyaev
22 | * @author Björn Kieling
23 | */
24 | @SpringBootApplication
25 | public class TestApplication {
26 | }
27 |
--------------------------------------------------------------------------------
/spring-modulith-events/spring-modulith-events-mongodb/src/test/resources/application.properties:
--------------------------------------------------------------------------------
1 | # Flapdoodle
2 | de.flapdoodle.mongodb.embedded.version=7.0.12
3 | logging.level.de.flapdoodle.embed.mongo=WARN
4 |
--------------------------------------------------------------------------------
/spring-modulith-events/spring-modulith-events-neo4j/src/main/java/org/springframework/modulith/events/neo4j/package-info.java:
--------------------------------------------------------------------------------
1 | /**
2 | * Neo4j integration for {@link org.springframework.modulith.events.core.EventPublicationRepository}.
3 | */
4 | @org.jspecify.annotations.NullMarked
5 | package org.springframework.modulith.events.neo4j;
6 |
--------------------------------------------------------------------------------
/spring-modulith-events/spring-modulith-events-neo4j/src/main/resources/META-INF/NOTICE:
--------------------------------------------------------------------------------
1 | Spring Modulith ${project.version}
2 | Copyright (c) 2021-2024 Broadcom, Inc.
3 |
4 | This product is licensed to you under the Apache License, Version 2.0
5 | (the "License"). You may not use this product except in compliance with
6 | the License.
7 |
--------------------------------------------------------------------------------
/spring-modulith-events/spring-modulith-events-neo4j/src/main/resources/META-INF/spring-configuration-metadata.json:
--------------------------------------------------------------------------------
1 | {
2 | "properties": [
3 | {
4 | "name": "spring.modulith.events.neo4j.event-index.enabled",
5 | "type": "java.lang.Boolean",
6 | "description": "Whether to initialize the index on the Neo4j event publication event hash property.",
7 | "defaultValue": "false"
8 | }
9 | ]
10 | }
11 |
--------------------------------------------------------------------------------
/spring-modulith-events/spring-modulith-events-neo4j/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports:
--------------------------------------------------------------------------------
1 | org.springframework.modulith.events.neo4j.Neo4jEventPublicationAutoConfiguration
2 |
--------------------------------------------------------------------------------
/spring-modulith-events/spring-modulith-events-neo4j/src/test/java/org/springframework/modulith/testapp/TestApplication.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2023-2025 the original author or authors.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package org.springframework.modulith.testapp;
17 |
18 | import org.springframework.boot.autoconfigure.SpringBootApplication;
19 |
20 | /**
21 | * @author Gerrit Meier
22 | */
23 | @SpringBootApplication
24 | public class TestApplication {}
25 |
--------------------------------------------------------------------------------
/spring-modulith-events/spring-modulith-events-tests/src/test/resources/logback.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | %d %5p %40.40c:%4L - %m%n
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/spring-modulith-examples/spring-modulith-example-epr-jdbc/.mvn/wrapper/maven-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spring-projects/spring-modulith/d3f059dc70a108b2782f6dea19a06c7806b7f413/spring-modulith-examples/spring-modulith-example-epr-jdbc/.mvn/wrapper/maven-wrapper.jar
--------------------------------------------------------------------------------
/spring-modulith-examples/spring-modulith-example-epr-jdbc/.mvn/wrapper/maven-wrapper.properties:
--------------------------------------------------------------------------------
1 | # Licensed to the Apache Software Foundation (ASF) under one
2 | # or more contributor license agreements. See the NOTICE file
3 | # distributed with this work for additional information
4 | # regarding copyright ownership. The ASF licenses this file
5 | # to you under the Apache License, Version 2.0 (the
6 | # "License"); you may not use this file except in compliance
7 | # with the License. You may obtain a copy of the License at
8 | #
9 | # https://www.apache.org/licenses/LICENSE-2.0
10 | #
11 | # Unless required by applicable law or agreed to in writing,
12 | # software distributed under the License is distributed on an
13 | # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14 | # KIND, either express or implied. See the License for the
15 | # specific language governing permissions and limitations
16 | # under the License.
17 | distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.3/apache-maven-3.9.3-bin.zip
18 | wrapperUrl=https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.1/maven-wrapper-3.1.1.jar
19 |
--------------------------------------------------------------------------------
/spring-modulith-examples/spring-modulith-example-epr-jdbc/src/main/asciidoc/index.adoc:
--------------------------------------------------------------------------------
1 | = Spring Modulith Example Documentation
2 | :modulith-docs: ../../../target/spring-modulith-docs
3 |
4 | == Overview
5 |
6 | plantuml::{modulith-docs}/components.puml[format="svg"]
7 |
8 | == Inventory
9 |
10 | plantuml::{modulith-docs}/module-inventory.puml[format="svg"]
11 | include::{modulith-docs}/module-inventory.adoc[]
12 |
13 | == Orders
14 |
15 | plantuml::{modulith-docs}/module-order.puml[format="svg"]
16 | include::{modulith-docs}/module-order.adoc[]
17 |
--------------------------------------------------------------------------------
/spring-modulith-examples/spring-modulith-example-epr-jdbc/src/main/java/example/Application.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2022-2025 the original author or authors.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package example;
17 |
18 | import org.springframework.boot.autoconfigure.SpringBootApplication;
19 |
20 | /**
21 | * Spring Modulith example application
22 | *
23 | * @author Oliver Drotbohm
24 | */
25 | @SpringBootApplication
26 | public class Application {
27 |
28 | public static void main(String... args) throws Exception {}
29 | }
30 |
--------------------------------------------------------------------------------
/spring-modulith-examples/spring-modulith-example-epr-jdbc/src/main/java/example/inventory/InventoryUpdated.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2023-2025 the original author or authors.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package example.inventory;
17 |
18 | import java.util.UUID;
19 |
20 | /**
21 | * @author Oliver Drotbohm
22 | */
23 | public record InventoryUpdated(UUID orderId) {}
24 |
--------------------------------------------------------------------------------
/spring-modulith-examples/spring-modulith-example-epr-jdbc/src/main/java/example/inventory/package-info.java:
--------------------------------------------------------------------------------
1 | /**
2 | * The logical application module inventory implemented as a single-package module. Allows to hide application
3 | * components inside the module by using package scoped types.
4 | *
5 | * @see example.inventory.InventoryInternal
6 | */
7 | @org.jspecify.annotations.NullMarked
8 | package example.inventory;
9 |
--------------------------------------------------------------------------------
/spring-modulith-examples/spring-modulith-example-epr-jdbc/src/main/java/example/order/OrderCompleted.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2022-2025 the original author or authors.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package example.order;
17 |
18 | import java.util.UUID;
19 |
20 | import org.jmolecules.event.types.DomainEvent;
21 |
22 | /**
23 | * @author Oliver Drotbohm
24 | */
25 | public record OrderCompleted(UUID orderId) implements DomainEvent {}
26 |
--------------------------------------------------------------------------------
/spring-modulith-examples/spring-modulith-example-epr-jdbc/src/main/java/example/order/package-info.java:
--------------------------------------------------------------------------------
1 | /**
2 | * The logical application module order implemented as a multi-package module. Internal components located in nested
3 | * packages are prevented from being accessed by the {@link org.springframework.modulith.core.ApplicationModules} type.
4 | *
5 | * @see example.ModularityTests
6 | */
7 | @org.jspecify.annotations.NullMarked
8 | package example.order;
9 |
--------------------------------------------------------------------------------
/spring-modulith-examples/spring-modulith-example-epr-jdbc/src/main/resources/application.properties:
--------------------------------------------------------------------------------
1 | spring.modulith.events.jdbc.schema-initialization.enabled=true
2 |
--------------------------------------------------------------------------------
/spring-modulith-examples/spring-modulith-example-epr-jdbc/src/main/resources/logback.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/spring-modulith-examples/spring-modulith-example-epr-jdbc/src/test/resources/logback-test.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/spring-modulith-examples/spring-modulith-example-epr-mongodb/.mvn/wrapper/maven-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spring-projects/spring-modulith/d3f059dc70a108b2782f6dea19a06c7806b7f413/spring-modulith-examples/spring-modulith-example-epr-mongodb/.mvn/wrapper/maven-wrapper.jar
--------------------------------------------------------------------------------
/spring-modulith-examples/spring-modulith-example-epr-mongodb/.mvn/wrapper/maven-wrapper.properties:
--------------------------------------------------------------------------------
1 | # Licensed to the Apache Software Foundation (ASF) under one
2 | # or more contributor license agreements. See the NOTICE file
3 | # distributed with this work for additional information
4 | # regarding copyright ownership. The ASF licenses this file
5 | # to you under the Apache License, Version 2.0 (the
6 | # "License"); you may not use this file except in compliance
7 | # with the License. You may obtain a copy of the License at
8 | #
9 | # https://www.apache.org/licenses/LICENSE-2.0
10 | #
11 | # Unless required by applicable law or agreed to in writing,
12 | # software distributed under the License is distributed on an
13 | # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14 | # KIND, either express or implied. See the License for the
15 | # specific language governing permissions and limitations
16 | # under the License.
17 | distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.3/apache-maven-3.9.3-bin.zip
18 | wrapperUrl=https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.1/maven-wrapper-3.1.1.jar
19 |
--------------------------------------------------------------------------------
/spring-modulith-examples/spring-modulith-example-epr-mongodb/src/main/asciidoc/index.adoc:
--------------------------------------------------------------------------------
1 | = Spring Modulith Example Documentation
2 | :modulith-docs: ../../../target/spring-modulith-docs
3 |
4 | == Overview
5 |
6 | plantuml::{modulith-docs}/components.puml[format="svg"]
7 |
8 | == Inventory
9 |
10 | plantuml::{modulith-docs}/module-inventory.puml[format="svg"]
11 | include::{modulith-docs}/module-inventory.adoc[]
12 |
13 | == Orders
14 |
15 | plantuml::{modulith-docs}/module-order.puml[format="svg"]
16 | include::{modulith-docs}/module-order.adoc[]
17 |
--------------------------------------------------------------------------------
/spring-modulith-examples/spring-modulith-example-epr-mongodb/src/main/java/example/inventory/InventoryUpdated.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2023-2025 the original author or authors.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package example.inventory;
17 |
18 | import java.util.UUID;
19 |
20 | /**
21 | * @author Oliver Drotbohm
22 | */
23 | public record InventoryUpdated(UUID orderId) {}
24 |
--------------------------------------------------------------------------------
/spring-modulith-examples/spring-modulith-example-epr-mongodb/src/main/java/example/inventory/package-info.java:
--------------------------------------------------------------------------------
1 | /**
2 | * The logical application module inventory implemented as a single-package module. Allows to hide application
3 | * components inside the module by using package scoped types.
4 | *
5 | * @see example.inventory.InventoryInternal
6 | */
7 | @org.jspecify.annotations.NullMarked
8 | package example.inventory;
9 |
--------------------------------------------------------------------------------
/spring-modulith-examples/spring-modulith-example-epr-mongodb/src/main/java/example/order/OrderCompleted.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2022-2025 the original author or authors.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package example.order;
17 |
18 | import java.util.UUID;
19 |
20 | import org.jmolecules.event.types.DomainEvent;
21 |
22 | /**
23 | * @author Oliver Drotbohm
24 | */
25 | public record OrderCompleted(UUID orderId) implements DomainEvent {}
26 |
--------------------------------------------------------------------------------
/spring-modulith-examples/spring-modulith-example-epr-mongodb/src/main/java/example/order/package-info.java:
--------------------------------------------------------------------------------
1 | /**
2 | * The logical application module order implemented as a multi-package module. Internal components located in nested
3 | * packages are prevented from being accessed by the {@link org.springframework.modulith.core.ApplicationModules} type.
4 | *
5 | * @see example.ModularityTests
6 | */
7 | @org.jspecify.annotations.NullMarked
8 | package example.order;
9 |
--------------------------------------------------------------------------------
/spring-modulith-examples/spring-modulith-example-epr-mongodb/src/test/resources/logback.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/spring-modulith-examples/spring-modulith-example-epr-neo4j/.mvn/wrapper/maven-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spring-projects/spring-modulith/d3f059dc70a108b2782f6dea19a06c7806b7f413/spring-modulith-examples/spring-modulith-example-epr-neo4j/.mvn/wrapper/maven-wrapper.jar
--------------------------------------------------------------------------------
/spring-modulith-examples/spring-modulith-example-epr-neo4j/.mvn/wrapper/maven-wrapper.properties:
--------------------------------------------------------------------------------
1 | # Licensed to the Apache Software Foundation (ASF) under one
2 | # or more contributor license agreements. See the NOTICE file
3 | # distributed with this work for additional information
4 | # regarding copyright ownership. The ASF licenses this file
5 | # to you under the Apache License, Version 2.0 (the
6 | # "License"); you may not use this file except in compliance
7 | # with the License. You may obtain a copy of the License at
8 | #
9 | # https://www.apache.org/licenses/LICENSE-2.0
10 | #
11 | # Unless required by applicable law or agreed to in writing,
12 | # software distributed under the License is distributed on an
13 | # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14 | # KIND, either express or implied. See the License for the
15 | # specific language governing permissions and limitations
16 | # under the License.
17 | distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.3/apache-maven-3.9.3-bin.zip
18 | wrapperUrl=https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.1/maven-wrapper-3.1.1.jar
19 |
--------------------------------------------------------------------------------
/spring-modulith-examples/spring-modulith-example-epr-neo4j/src/main/asciidoc/index.adoc:
--------------------------------------------------------------------------------
1 | = Spring Modulith Example Documentation
2 | :modulith-docs: ../../../target/spring-modulith-docs
3 |
4 | == Overview
5 |
6 | plantuml::{modulith-docs}/components.puml[format="svg"]
7 |
8 | == Inventory
9 |
10 | plantuml::{modulith-docs}/module-inventory.puml[format="svg"]
11 | include::{modulith-docs}/module-inventory.adoc[]
12 |
13 | == Orders
14 |
15 | plantuml::{modulith-docs}/module-order.puml[format="svg"]
16 | include::{modulith-docs}/module-order.adoc[]
17 |
--------------------------------------------------------------------------------
/spring-modulith-examples/spring-modulith-example-epr-neo4j/src/main/java/example/Application.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2022-2025 the original author or authors.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package example;
17 |
18 | import org.springframework.boot.autoconfigure.SpringBootApplication;
19 |
20 | /**
21 | * Spring Modulith example application
22 | *
23 | * @author Oliver Drotbohm
24 | */
25 | @SpringBootApplication
26 | public class Application {
27 |
28 | public static void main(String... args) {}
29 | }
30 |
--------------------------------------------------------------------------------
/spring-modulith-examples/spring-modulith-example-epr-neo4j/src/main/java/example/inventory/InventoryUpdated.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2023-2025 the original author or authors.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package example.inventory;
17 |
18 | import java.util.UUID;
19 |
20 | /**
21 | * @author Oliver Drotbohm
22 | */
23 | public record InventoryUpdated(UUID orderId) {}
24 |
--------------------------------------------------------------------------------
/spring-modulith-examples/spring-modulith-example-epr-neo4j/src/main/java/example/inventory/package-info.java:
--------------------------------------------------------------------------------
1 | /**
2 | * The logical application module inventory implemented as a single-package module. Allows to hide application
3 | * components inside the module by using package scoped types.
4 | *
5 | * @see example.inventory.InventoryInternal
6 | */
7 | @org.jspecify.annotations.NullMarked
8 | package example.inventory;
9 |
--------------------------------------------------------------------------------
/spring-modulith-examples/spring-modulith-example-epr-neo4j/src/main/java/example/order/OrderCompleted.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2022-2025 the original author or authors.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package example.order;
17 |
18 | import java.util.UUID;
19 |
20 | import org.jmolecules.event.types.DomainEvent;
21 |
22 | /**
23 | * @author Oliver Drotbohm
24 | */
25 | public record OrderCompleted(UUID orderId) implements DomainEvent {}
26 |
--------------------------------------------------------------------------------
/spring-modulith-examples/spring-modulith-example-epr-neo4j/src/main/java/example/order/package-info.java:
--------------------------------------------------------------------------------
1 | /**
2 | * The logical application module order implemented as a multi-package module. Internal components located in nested
3 | * packages are prevented from being accessed by the {@link org.springframework.modulith.core.ApplicationModules} type.
4 | *
5 | * @see example.ModularityTests
6 | */
7 | @org.jspecify.annotations.NullMarked
8 | package example.order;
9 |
--------------------------------------------------------------------------------
/spring-modulith-examples/spring-modulith-example-full/.mvn/wrapper/maven-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spring-projects/spring-modulith/d3f059dc70a108b2782f6dea19a06c7806b7f413/spring-modulith-examples/spring-modulith-example-full/.mvn/wrapper/maven-wrapper.jar
--------------------------------------------------------------------------------
/spring-modulith-examples/spring-modulith-example-full/.mvn/wrapper/maven-wrapper.properties:
--------------------------------------------------------------------------------
1 | # Licensed to the Apache Software Foundation (ASF) under one
2 | # or more contributor license agreements. See the NOTICE file
3 | # distributed with this work for additional information
4 | # regarding copyright ownership. The ASF licenses this file
5 | # to you under the Apache License, Version 2.0 (the
6 | # "License"); you may not use this file except in compliance
7 | # with the License. You may obtain a copy of the License at
8 | #
9 | # https://www.apache.org/licenses/LICENSE-2.0
10 | #
11 | # Unless required by applicable law or agreed to in writing,
12 | # software distributed under the License is distributed on an
13 | # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14 | # KIND, either express or implied. See the License for the
15 | # specific language governing permissions and limitations
16 | # under the License.
17 | distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.3/apache-maven-3.9.3-bin.zip
18 | wrapperUrl=https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.1/maven-wrapper-3.1.1.jar
19 |
--------------------------------------------------------------------------------
/spring-modulith-examples/spring-modulith-example-full/src/main/asciidoc/index.adoc:
--------------------------------------------------------------------------------
1 | = Spring Modulith Example Documentation
2 | :modulith-docs: ../../../target/spring-modulith-docs
3 |
4 | == Overview
5 |
6 | plantuml::{modulith-docs}/components.puml[format="svg"]
7 |
8 | == Inventory
9 |
10 | plantuml::{modulith-docs}/module-inventory.puml[format="svg"]
11 | include::{modulith-docs}/module-inventory.adoc[]
12 |
13 | == Orders
14 |
15 | plantuml::{modulith-docs}/module-order.puml[format="svg"]
16 | include::{modulith-docs}/module-order.adoc[]
17 |
--------------------------------------------------------------------------------
/spring-modulith-examples/spring-modulith-example-full/src/main/java/example/inventory/package-info.java:
--------------------------------------------------------------------------------
1 | /**
2 | * The logical application module inventory implemented as a single-package module. Allows to hide application
3 | * components inside the module by using package scoped types.
4 | *
5 | * @see example.inventory.InventoryInternal
6 | */
7 | @org.jspecify.annotations.NullMarked
8 | package example.inventory;
9 |
--------------------------------------------------------------------------------
/spring-modulith-examples/spring-modulith-example-full/src/main/java/example/order/OrderCompleted.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2022-2025 the original author or authors.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package example.order;
17 |
18 | import example.order.Order.OrderIdentifier;
19 |
20 | import org.jmolecules.event.types.DomainEvent;
21 |
22 | /**
23 | * @author Oliver Drotbohm
24 | */
25 | public record OrderCompleted(OrderIdentifier orderId) implements DomainEvent {}
26 |
--------------------------------------------------------------------------------
/spring-modulith-examples/spring-modulith-example-full/src/main/java/example/order/internal/OrderInternal.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2022-2025 the original author or authors.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package example.order.internal;
17 |
18 | import org.springframework.stereotype.Component;
19 |
20 | /**
21 | * Some order-internal application component. Referring to it from the inventory module would be captured by
22 | * {@link example.ModularityTests}.
23 | *
24 | * @author Oliver Drotbohm
25 | */
26 | @Component
27 | public class OrderInternal {}
28 |
--------------------------------------------------------------------------------
/spring-modulith-examples/spring-modulith-example-full/src/main/java/example/order/package-info.java:
--------------------------------------------------------------------------------
1 | /**
2 | * The logical application module order implemented as a multi-package module. Internal components located in nested
3 | * packages are prevented from being accessed by the {@link org.springframework.modulith.core.ApplicationModules} type.
4 | *
5 | * @see example.ModularityTests
6 | */
7 | @org.jspecify.annotations.NullMarked
8 | package example.order;
9 |
--------------------------------------------------------------------------------
/spring-modulith-examples/spring-modulith-example-full/src/main/resources/application.properties:
--------------------------------------------------------------------------------
1 | spring.jpa.show-sql=true
2 |
3 | management.endpoints.web.exposure.include=health,modulith
4 |
--------------------------------------------------------------------------------
/spring-modulith-examples/spring-modulith-example-full/src/main/resources/logback.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/spring-modulith-examples/spring-modulith-example-kafka/src/main/java/example/order/OrderCompleted.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2022-2025 the original author or authors.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package example.order;
17 |
18 | import example.order.Order.OrderIdentifier;
19 |
20 | import org.jmolecules.event.types.DomainEvent;
21 | import org.springframework.modulith.events.Externalized;
22 |
23 | /**
24 | * @author Oliver Drotbohm
25 | */
26 | @Externalized
27 | public record OrderCompleted(OrderIdentifier orderId) implements DomainEvent {}
28 |
--------------------------------------------------------------------------------
/spring-modulith-examples/spring-modulith-example-kafka/src/main/java/example/order/package-info.java:
--------------------------------------------------------------------------------
1 | /**
2 | * The logical application module order implemented as a multi-package module. Internal components located in nested
3 | * packages are prevented from being accessed by the {@link org.springframework.modulith.core.ApplicationModules} type.
4 | *
5 | * @see example.ModularityTests
6 | */
7 | @org.jspecify.annotations.NullMarked
8 | package example.order;
9 |
--------------------------------------------------------------------------------
/spring-modulith-examples/spring-modulith-example-kafka/src/main/resources/application.properties:
--------------------------------------------------------------------------------
1 | spring.jpa.show-sql=true
2 |
--------------------------------------------------------------------------------
/spring-modulith-examples/spring-modulith-example-kafka/src/main/resources/logback.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/spring-modulith-integration-test/src/main/java/com/acme/myproject/Application.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2018-2025 the original author or authors.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package com.acme.myproject;
17 |
18 | import org.springframework.modulith.Modulith;
19 |
20 | /**
21 | * @author Oliver Drotbohm
22 | */
23 | @Modulith
24 | public class Application {
25 |
26 | }
27 |
--------------------------------------------------------------------------------
/spring-modulith-integration-test/src/main/java/com/acme/myproject/CentralConfiguration.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2023-2025 the original author or authors.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package com.acme.myproject;
17 |
18 | import org.springframework.stereotype.Component;
19 |
20 | import com.acme.myproject.moduleB.internal.InternalComponentB;
21 |
22 | /**
23 | *
24 | * @author Oliver Drotbohm
25 | */
26 | @Component
27 | class CentralConfiguration {
28 | private InternalComponentB referenceToModuleInternalComponent;
29 | }
30 |
--------------------------------------------------------------------------------
/spring-modulith-integration-test/src/main/java/com/acme/myproject/aot/Some$$SpringCGLIB$$Proxy.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2023-2025 the original author or authors.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package com.acme.myproject.aot;
17 |
18 | /**
19 | *
20 | * @author Oliver Drotbohm
21 | */
22 | public class Some$$SpringCGLIB$$Proxy {
23 |
24 | }
25 |
--------------------------------------------------------------------------------
/spring-modulith-integration-test/src/main/java/com/acme/myproject/aot/Spring__Aot.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2023-2025 the original author or authors.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package com.acme.myproject.aot;
17 |
18 | import org.springframework.aot.generate.Generated;
19 |
20 | /**
21 | * @author Oliver Drotbohm
22 | */
23 | @Generated
24 | public class Spring__Aot {
25 |
26 | }
27 |
--------------------------------------------------------------------------------
/spring-modulith-integration-test/src/main/java/com/acme/myproject/aot/package-info.java:
--------------------------------------------------------------------------------
1 | package com.acme.myproject.aot;
2 |
--------------------------------------------------------------------------------
/spring-modulith-integration-test/src/main/java/com/acme/myproject/complex/api/ComplexApiComponent.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2018-2025 the original author or authors.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package com.acme.myproject.complex.api;
17 |
18 | /**
19 | *
20 | * @author Oliver Drotbohm
21 | */
22 | public class ComplexApiComponent {
23 |
24 | }
25 |
--------------------------------------------------------------------------------
/spring-modulith-integration-test/src/main/java/com/acme/myproject/complex/api/package-info.java:
--------------------------------------------------------------------------------
1 | @NamedInterface("API")
2 | package com.acme.myproject.complex.api;
3 |
4 | import org.springframework.modulith.NamedInterface;
--------------------------------------------------------------------------------
/spring-modulith-integration-test/src/main/java/com/acme/myproject/complex/internal/ComplextInternalComponent.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2018-2025 the original author or authors.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package com.acme.myproject.complex.internal;
17 |
18 | import org.springframework.stereotype.Component;
19 |
20 | /**
21 | * @author Oliver Drotbohm
22 | */
23 | @Component
24 | class ComplextInternalComponent {
25 |
26 | }
27 |
--------------------------------------------------------------------------------
/spring-modulith-integration-test/src/main/java/com/acme/myproject/complex/internal/FirstTypeBasedPort.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2019-2025 the original author or authors.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package com.acme.myproject.complex.internal;
17 |
18 | import org.springframework.modulith.NamedInterface;
19 |
20 | /**
21 | * @author Oliver Drotbohm
22 | */
23 | @NamedInterface({ "Port 1", "Port 2" })
24 | public class FirstTypeBasedPort {
25 |
26 | }
27 |
--------------------------------------------------------------------------------
/spring-modulith-integration-test/src/main/java/com/acme/myproject/complex/internal/SecondTypeBasePort.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2019-2025 the original author or authors.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package com.acme.myproject.complex.internal;
17 |
18 | import org.springframework.modulith.NamedInterface;
19 |
20 | /**
21 | * @author Oliver Drotbohm
22 | */
23 | @NamedInterface({ "Port 2", "Port 3" })
24 | public class SecondTypeBasePort {
25 |
26 | }
27 |
--------------------------------------------------------------------------------
/spring-modulith-integration-test/src/main/java/com/acme/myproject/complex/spi/ComplexSpiComponent.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2018-2025 the original author or authors.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package com.acme.myproject.complex.spi;
17 |
18 | /**
19 | *
20 | * @author Oliver Drotbohm
21 | */
22 | public class ComplexSpiComponent {
23 |
24 | }
25 |
--------------------------------------------------------------------------------
/spring-modulith-integration-test/src/main/java/com/acme/myproject/complex/spi/package-info.java:
--------------------------------------------------------------------------------
1 | @NamedInterface("SPI")
2 | package com.acme.myproject.complex.spi;
3 |
4 | import org.springframework.modulith.NamedInterface;
--------------------------------------------------------------------------------
/spring-modulith-integration-test/src/main/java/com/acme/myproject/cycleA/CycleA.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2018-2025 the original author or authors.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package com.acme.myproject.cycleA;
17 |
18 | import com.acme.myproject.cycleB.CycleB;
19 |
20 | /**
21 | * @author Oliver Drotbohm
22 | */
23 | public class CycleA {
24 | CycleB cycleB;
25 | }
26 |
--------------------------------------------------------------------------------
/spring-modulith-integration-test/src/main/java/com/acme/myproject/cycleB/CycleB.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2018-2025 the original author or authors.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package com.acme.myproject.cycleB;
17 |
18 | import com.acme.myproject.cycleA.CycleA;
19 |
20 | /**
21 | * @author Oliver Drotbohm
22 | */
23 | public class CycleB {
24 | CycleA cycleA;
25 | }
26 |
--------------------------------------------------------------------------------
/spring-modulith-integration-test/src/main/java/com/acme/myproject/fieldinjected/WithFieldInjection.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2019-2025 the original author or authors.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package com.acme.myproject.fieldinjected;
17 |
18 | import org.springframework.beans.factory.annotation.Autowired;
19 | import org.springframework.stereotype.Component;
20 |
21 | import com.acme.myproject.moduleA.ServiceComponentA;
22 |
23 | /**
24 | * @author Oliver Drotbohm
25 | */
26 | @Component
27 | public class WithFieldInjection {
28 |
29 | @Autowired ServiceComponentA a;
30 | }
31 |
--------------------------------------------------------------------------------
/spring-modulith-integration-test/src/main/java/com/acme/myproject/invalid/InvalidComponent.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2018-2025 the original author or authors.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package com.acme.myproject.invalid;
17 |
18 | import com.acme.myproject.moduleB.internal.InternalComponentB;
19 |
20 | /**
21 | * @author Oliver Drotbohm
22 | */
23 | public class InvalidComponent {
24 |
25 | InvalidComponent(InternalComponentB invalidComponent) {}
26 | }
27 |
--------------------------------------------------------------------------------
/spring-modulith-integration-test/src/main/java/com/acme/myproject/invalid2/package-info.java:
--------------------------------------------------------------------------------
1 | @ApplicationModule(allowedDependencies = "moduleB")
2 | package com.acme.myproject.invalid2;
3 |
4 | import org.springframework.modulith.ApplicationModule;
--------------------------------------------------------------------------------
/spring-modulith-integration-test/src/main/java/com/acme/myproject/invalid3/package-info.java:
--------------------------------------------------------------------------------
1 | @ApplicationModule(allowedDependencies = "complex::API")
2 | package com.acme.myproject.invalid3;
3 |
4 | import org.springframework.modulith.ApplicationModule;
5 |
--------------------------------------------------------------------------------
/spring-modulith-integration-test/src/main/java/com/acme/myproject/moduleA/SomeEventA.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2018-2025 the original author or authors.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package com.acme.myproject.moduleA;
17 |
18 | import org.jmolecules.event.annotation.DomainEvent;
19 |
20 | /**
21 | * @author Oliver Drotbohm
22 | */
23 | @DomainEvent
24 | public record SomeEventA(String message) {}
25 |
--------------------------------------------------------------------------------
/spring-modulith-integration-test/src/main/java/com/acme/myproject/moduleB/SomeEventListenerB.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2018-2025 the original author or authors.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package com.acme.myproject.moduleB;
17 |
18 | import org.springframework.context.event.EventListener;
19 | import org.springframework.stereotype.Component;
20 |
21 | import com.acme.myproject.moduleA.SomeEventA;
22 |
23 | /**
24 | * @author Oliver Drotbohm
25 | */
26 | @Component
27 | class SomeEventListenerB {
28 |
29 | @EventListener
30 | void on(SomeEventA event) {}
31 | }
32 |
--------------------------------------------------------------------------------
/spring-modulith-integration-test/src/main/java/com/acme/myproject/moduleB/internal/InternalComponentB.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2018-2025 the original author or authors.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package com.acme.myproject.moduleB.internal;
17 |
18 | import org.springframework.stereotype.Component;
19 |
20 | /**
21 | * @author Oliver Drotbohm
22 | */
23 | @Component
24 | public class InternalComponentB {
25 |
26 | }
27 |
--------------------------------------------------------------------------------
/spring-modulith-integration-test/src/main/java/com/acme/myproject/moduleB/internal/SupportingComponentB.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2018-2025 the original author or authors.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package com.acme.myproject.moduleB.internal;
17 |
18 | import org.springframework.stereotype.Component;
19 |
20 | /**
21 | * @author Oliver Drotbohm
22 | */
23 | @Component
24 | class SupportingComponentB {
25 |
26 | }
27 |
--------------------------------------------------------------------------------
/spring-modulith-integration-test/src/main/java/com/acme/myproject/moduleC/SomeValueC.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2022-2025 the original author or authors.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package com.acme.myproject.moduleC;
17 |
18 | /**
19 | * @author Oliver Drotbohm
20 | */
21 | public class SomeValueC {}
22 |
--------------------------------------------------------------------------------
/spring-modulith-integration-test/src/main/java/com/acme/myproject/moduleC/package-info.java:
--------------------------------------------------------------------------------
1 | @ApplicationModule(displayName = "MyModule C")
2 | package com.acme.myproject.moduleC;
3 |
4 | import org.springframework.modulith.ApplicationModule;
--------------------------------------------------------------------------------
/spring-modulith-integration-test/src/main/java/com/acme/myproject/moduleD/EventListenerD.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2022-2025 the original author or authors.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package com.acme.myproject.moduleD;
17 |
18 | import org.springframework.context.event.EventListener;
19 | import org.springframework.stereotype.Component;
20 |
21 | import com.acme.myproject.moduleA.SomeEventA;
22 |
23 | /**
24 | * @author Oliver Drotbohm
25 | */
26 | @Component
27 | class EventListenerD {
28 |
29 | @EventListener
30 | void on(SomeEventA event) {}
31 | }
32 |
--------------------------------------------------------------------------------
/spring-modulith-integration-test/src/main/java/com/acme/myproject/moduleE/ServiceComponentE.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2018-2025 the original author or authors.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package com.acme.myproject.moduleE;
17 |
18 | import org.springframework.stereotype.Component;
19 |
20 | /**
21 | * @author Oliver Drotbohm
22 | */
23 | @Component
24 | public class ServiceComponentE {}
25 |
--------------------------------------------------------------------------------
/spring-modulith-integration-test/src/main/java/com/acme/myproject/open/internal/Internal.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2024-2025 the original author or authors.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package com.acme.myproject.open.internal;
17 |
18 | import org.springframework.stereotype.Component;
19 |
20 | import com.acme.myproject.openclient.ClientToInternal;
21 |
22 | /**
23 | * @author Oliver Drotbohm
24 | */
25 | @Component
26 | public class Internal {
27 |
28 | ClientToInternal clientToInternal;
29 | }
30 |
--------------------------------------------------------------------------------
/spring-modulith-integration-test/src/main/java/com/acme/myproject/open/package-info.java:
--------------------------------------------------------------------------------
1 | @ApplicationModule(type = Type.OPEN)
2 | package com.acme.myproject.open;
3 |
4 | import org.springframework.modulith.ApplicationModule;
5 | import org.springframework.modulith.ApplicationModule.Type;
6 |
--------------------------------------------------------------------------------
/spring-modulith-integration-test/src/main/java/com/acme/myproject/openclient/ClientToInternal.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2024-2025 the original author or authors.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package com.acme.myproject.openclient;
17 |
18 | import com.acme.myproject.open.internal.Internal;
19 |
20 | /**
21 | * @author Oliver Drotbohm
22 | */
23 | public class ClientToInternal {
24 |
25 | Internal internal;
26 | }
27 |
--------------------------------------------------------------------------------
/spring-modulith-integration-test/src/main/java/com/acme/myproject/opendisallowedclient/DisallowedClientOfInternal.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2024-2025 the original author or authors.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package com.acme.myproject.opendisallowedclient;
17 |
18 | import com.acme.myproject.open.internal.Internal;
19 |
20 | /**
21 | * @author Oliver Drotbohm
22 | */
23 | public class DisallowedClientOfInternal {
24 | Internal internal;
25 | }
26 |
--------------------------------------------------------------------------------
/spring-modulith-integration-test/src/main/java/com/acme/myproject/opendisallowedclient/package-info.java:
--------------------------------------------------------------------------------
1 | @org.springframework.modulith.ApplicationModule(allowedDependencies = "moduleA")
2 | package com.acme.myproject.opendisallowedclient;
3 |
--------------------------------------------------------------------------------
/spring-modulith-integration-test/src/main/java/com/acme/myproject/stereotypes/web/WebRepresentations.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2020-2025 the original author or authors.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package com.acme.myproject.stereotypes.web;
17 |
18 | import org.springframework.stereotype.Component;
19 |
20 | /**
21 | * @author Oliver Drotbohm
22 | */
23 | @Component
24 | public class WebRepresentations {
25 |
26 | }
27 |
--------------------------------------------------------------------------------
/spring-modulith-integration-test/src/main/java/contributed/detected/DetectedContribution.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2024-2025 the original author or authors.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package contributed.detected;
17 |
18 | /**
19 | *
20 | * @author Oliver Drotbohm
21 | */
22 | public class DetectedContribution {
23 |
24 | }
25 |
--------------------------------------------------------------------------------
/spring-modulith-integration-test/src/main/java/contributed/detected/package-info.java:
--------------------------------------------------------------------------------
1 | @org.springframework.modulith.ApplicationModule
2 | package contributed.detected;
3 |
--------------------------------------------------------------------------------
/spring-modulith-integration-test/src/main/java/contributed/enumerated/EnumeratedContribution.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2024-2025 the original author or authors.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package contributed.enumerated;
17 |
18 | /**
19 | *
20 | * @author Oliver Drotbohm
21 | */
22 | public class EnumeratedContribution {
23 |
24 | }
25 |
--------------------------------------------------------------------------------
/spring-modulith-integration-test/src/main/java/contributed/enumerated/package-info.java:
--------------------------------------------------------------------------------
1 | package contributed.enumerated;
2 |
--------------------------------------------------------------------------------
/spring-modulith-integration-test/src/main/java/example/declared/first/Declared.java:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spring-projects/spring-modulith/d3f059dc70a108b2782f6dea19a06c7806b7f413/spring-modulith-integration-test/src/main/java/example/declared/first/Declared.java
--------------------------------------------------------------------------------
/spring-modulith-integration-test/src/main/java/example/declared/first/First.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2023-2025 the original author or authors.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package example.declared.first;
17 |
18 | import example.declared.second.Second;
19 |
20 | import org.springframework.stereotype.Component;
21 |
22 | /**
23 | * @author Oliver Drotbohm
24 | */
25 | @Component
26 | public class First {
27 |
28 | First(Second second) {}
29 | }
30 |
--------------------------------------------------------------------------------
/spring-modulith-integration-test/src/main/java/example/declared/first/package-info.java:
--------------------------------------------------------------------------------
1 | // No dependencies allowed
2 | @org.springframework.modulith.ApplicationModule(allowedDependencies = {})
3 | package example.declared.first;
4 |
--------------------------------------------------------------------------------
/spring-modulith-integration-test/src/main/java/example/declared/fourth/Fourth.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2023-2025 the original author or authors.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package example.declared.fourth;
17 |
18 | import org.springframework.stereotype.Component;
19 |
20 | /**
21 | * @author Oliver Drotbohm
22 | */
23 | @Component
24 | public class Fourth {
25 |
26 | }
27 |
--------------------------------------------------------------------------------
/spring-modulith-integration-test/src/main/java/example/declared/second/Second.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2023-2025 the original author or authors.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package example.declared.second;
17 |
18 | import example.declared.third.Third;
19 |
20 | import org.springframework.stereotype.Component;
21 |
22 | /**
23 | * @author Oliver Drotbohm
24 | */
25 | @Component
26 | public class Second {
27 | Second(Third third) {}
28 | }
29 |
--------------------------------------------------------------------------------
/spring-modulith-integration-test/src/main/java/example/declared/second/package-info.java:
--------------------------------------------------------------------------------
1 | // No explicit allowed dependencies -> all allowed
2 | @org.springframework.modulith.ApplicationModule(displayName = "Second")
3 | package example.declared.second;
4 |
--------------------------------------------------------------------------------
/spring-modulith-integration-test/src/main/java/example/declared/third/Third.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2023-2025 the original author or authors.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package example.declared.third;
17 |
18 | import example.declared.fourth.Fourth;
19 |
20 | import org.springframework.stereotype.Component;
21 |
22 | /**
23 | * @author Oliver Drotbohm
24 | */
25 | @Component
26 | public class Third {
27 | Third(Fourth fourth) {}
28 | }
29 |
--------------------------------------------------------------------------------
/spring-modulith-integration-test/src/main/java/example/empty/EmptyApplication.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2024-2025 the original author or authors.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package example.empty;
17 |
18 | import org.springframework.modulith.Modulithic;
19 |
20 | /**
21 | * @author Oliver Drotbohm
22 | */
23 | @Modulithic
24 | public class EmptyApplication {
25 |
26 | }
27 |
--------------------------------------------------------------------------------
/spring-modulith-integration-test/src/main/java/pkg/multipleontype/MarkerOne.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2024-2025 the original author or authors.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package pkg.multipleontype;
17 |
18 | import org.springframework.modulith.ApplicationModule;
19 |
20 | /**
21 | * @author Oliver Drotbohm
22 | */
23 | @ApplicationModule
24 | class MarkerOne {}
25 |
--------------------------------------------------------------------------------
/spring-modulith-integration-test/src/main/java/pkg/multipleontype/MarkerTwo.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2024-2025 the original author or authors.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package pkg.multipleontype;
17 |
18 | import org.springframework.modulith.ApplicationModule;
19 |
20 | /**
21 | * @author Oliver Drotbohm
22 | */
23 | @ApplicationModule
24 | class MarkerTwo {}
25 |
--------------------------------------------------------------------------------
/spring-modulith-integration-test/src/main/java/pkg/onpackage/package-info.java:
--------------------------------------------------------------------------------
1 | @org.springframework.modulith.ApplicationModule(displayName = "onPackage")
2 | package pkg.onpackage;
3 |
--------------------------------------------------------------------------------
/spring-modulith-integration-test/src/main/java/pkg/ontype/Marker.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2024-2025 the original author or authors.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package pkg.ontype;
17 |
18 | import org.springframework.modulith.ApplicationModule;
19 |
20 | /**
21 | * @author Oliver Drotbohm
22 | */
23 | @ApplicationModule(displayName = "onType")
24 | public class Marker {}
25 |
--------------------------------------------------------------------------------
/spring-modulith-integration-test/src/main/java/pkg/ontype/nested/Marker.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2024-2025 the original author or authors.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package pkg.ontype.nested;
17 |
18 | import org.springframework.modulith.ApplicationModule;
19 |
20 | /**
21 | * @author Oliver Drotbohm
22 | */
23 | @ApplicationModule(displayName = "onTypeNested")
24 | public class Marker {}
25 |
--------------------------------------------------------------------------------
/spring-modulith-integration-test/src/main/resources/META-INF/spring-test.factories:
--------------------------------------------------------------------------------
1 | org.springframework.modulith.core.ApplicationModuleSourceFactory=contributed.ApplicationModuleSourceContribution
2 |
--------------------------------------------------------------------------------
/spring-modulith-integration-test/src/test/resources/META-INF/spring.factories:
--------------------------------------------------------------------------------
1 | org.springframework.modulith.core.ApplicationModuleDetectionStrategy=\
2 | org.springframework.modulith.core.TestModuleDetectionStrategy
3 |
--------------------------------------------------------------------------------
/spring-modulith-integration-test/src/test/resources/application.properties:
--------------------------------------------------------------------------------
1 | spring.main.banner-mode=off
2 |
--------------------------------------------------------------------------------
/spring-modulith-integration-test/src/test/resources/logback.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | %d %5p %40.40c:%4L - %m%n
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/spring-modulith-junit/src/main/java/org/springframework/modulith/junit/diff/package-info.java:
--------------------------------------------------------------------------------
1 | /**
2 | * Project differences detection implementation.
3 | *
4 | * @since 1.3
5 | */
6 | package org.springframework.modulith.junit.diff;
7 |
--------------------------------------------------------------------------------
/spring-modulith-junit/src/main/java/org/springframework/modulith/junit/package-info.java:
--------------------------------------------------------------------------------
1 | /**
2 | * JUnit extension to optimize test case execution depending of the changes made to an application.
3 | *
4 | * @since 1.3
5 | */
6 | package org.springframework.modulith.junit;
7 |
--------------------------------------------------------------------------------
/spring-modulith-junit/src/main/resources/META-INF/NOTICE:
--------------------------------------------------------------------------------
1 | Spring Modulith ${project.version}
2 | Copyright (c) 2021-2024 Broadcom, Inc.
3 |
4 | This product is licensed to you under the Apache License, Version 2.0
5 | (the "License"). You may not use this product except in compliance with
6 | the License.
7 |
--------------------------------------------------------------------------------
/spring-modulith-junit/src/main/resources/META-INF/services/org.junit.jupiter.api.extension.Extension:
--------------------------------------------------------------------------------
1 | org.springframework.modulith.junit.ModulithExecutionCondition
2 |
--------------------------------------------------------------------------------
/spring-modulith-junit/src/main/resources/junit-platform.properties:
--------------------------------------------------------------------------------
1 | junit.jupiter.extensions.autodetection.enabled=true
2 |
--------------------------------------------------------------------------------
/spring-modulith-junit/src/test/java/example/a/package-info.java:
--------------------------------------------------------------------------------
1 | package example.a;
2 |
--------------------------------------------------------------------------------
/spring-modulith-junit/src/test/java/example/b/package-info.java:
--------------------------------------------------------------------------------
1 | package example.b;
2 |
--------------------------------------------------------------------------------
/spring-modulith-junit/src/test/java/example/package-info.java:
--------------------------------------------------------------------------------
1 | package example;
2 |
--------------------------------------------------------------------------------
/spring-modulith-moments/src/main/java/org/springframework/modulith/moments/autoconfigure/package-info.java:
--------------------------------------------------------------------------------
1 | /**
2 | * Autoconfiguration for the {@link org.springframework.modulith.moments.support.Moments} API.
3 | */
4 | @org.jspecify.annotations.NullMarked
5 | package org.springframework.modulith.moments.autoconfigure;
6 |
--------------------------------------------------------------------------------
/spring-modulith-moments/src/main/java/org/springframework/modulith/moments/package-info.java:
--------------------------------------------------------------------------------
1 | /**
2 | * An Passage-of-Time events implementation.
3 | */
4 | @org.jspecify.annotations.NullMarked
5 | package org.springframework.modulith.moments;
6 |
--------------------------------------------------------------------------------
/spring-modulith-moments/src/main/java/org/springframework/modulith/moments/support/package-info.java:
--------------------------------------------------------------------------------
1 | /**
2 | * The {@link org.springframework.modulith.moments.support.Moments} abstraction to integrate with Spring Framework's
3 | * scheduling.
4 | */
5 | @org.jspecify.annotations.NullMarked
6 | package org.springframework.modulith.moments.support;
7 |
--------------------------------------------------------------------------------
/spring-modulith-moments/src/main/resources/META-INF/NOTICE:
--------------------------------------------------------------------------------
1 | Spring Modulith ${project.version}
2 | Copyright (c) 2021-2024 Broadcom, Inc.
3 |
4 | This product is licensed to you under the Apache License, Version 2.0
5 | (the "License"). You may not use this product except in compliance with
6 | the License.
7 |
--------------------------------------------------------------------------------
/spring-modulith-moments/src/main/resources/META-INF/spring.factories:
--------------------------------------------------------------------------------
1 | org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
2 | org.springframework.modulith.moments.autoconfigure.MomentsAutoConfiguration
3 |
--------------------------------------------------------------------------------
/spring-modulith-moments/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports:
--------------------------------------------------------------------------------
1 | org.springframework.modulith.moments.autoconfigure.MomentsAutoConfiguration
2 |
--------------------------------------------------------------------------------
/spring-modulith-moments/src/test/resources/logback.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | %d %5p %40.40c:%4L - %m%n
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/spring-modulith-observability/src/main/java/org/springframework/modulith/observability/autoconfigure/package-info.java:
--------------------------------------------------------------------------------
1 | /**
2 | * Autoconfiguration for the observability integration.
3 | */
4 | @org.jspecify.annotations.NullMarked
5 | package org.springframework.modulith.observability.autoconfigure;
6 |
--------------------------------------------------------------------------------
/spring-modulith-observability/src/main/java/org/springframework/modulith/observability/package-info.java:
--------------------------------------------------------------------------------
1 | /**
2 | * Support for application module observability.
3 | */
4 | @org.jspecify.annotations.NullMarked
5 | package org.springframework.modulith.observability;
6 |
--------------------------------------------------------------------------------
/spring-modulith-observability/src/main/java/org/springframework/modulith/observability/support/package-info.java:
--------------------------------------------------------------------------------
1 | /**
2 | * Support for application module observability.
3 | */
4 | @org.jspecify.annotations.NullMarked
5 | package org.springframework.modulith.observability.support;
6 |
--------------------------------------------------------------------------------
/spring-modulith-observability/src/main/resources/META-INF/NOTICE:
--------------------------------------------------------------------------------
1 | Spring Modulith ${project.version}
2 | Copyright (c) 2021-2024 Broadcom, Inc.
3 |
4 | This product is licensed to you under the Apache License, Version 2.0
5 | (the "License"). You may not use this product except in compliance with
6 | the License.
7 |
--------------------------------------------------------------------------------
/spring-modulith-observability/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports:
--------------------------------------------------------------------------------
1 | org.springframework.modulith.observability.autoconfigure.ModuleObservabilityAutoConfiguration
2 | org.springframework.modulith.observability.autoconfigure.SpringDataRestModuleObservabilityAutoConfiguration
3 |
--------------------------------------------------------------------------------
/spring-modulith-observability/src/test/java/example/sample/SampleComponent.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2023-2025 the original author or authors.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package example.sample;
17 |
18 | import org.springframework.scheduling.annotation.Async;
19 | import org.springframework.stereotype.Component;
20 |
21 | /**
22 | * @author Oliver Drotbohm
23 | */
24 | @Component
25 | public class SampleComponent {
26 |
27 | @Async
28 | public void someMethod() {}
29 | }
30 |
--------------------------------------------------------------------------------
/spring-modulith-observability/src/test/java/example/sample/SampleConfiguration.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2023-2025 the original author or authors.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package example.sample;
17 |
18 | import org.springframework.context.annotation.Configuration;
19 |
20 | /**
21 | * @author Oliver Drotbohm
22 | */
23 | @Configuration
24 | public class SampleConfiguration {}
25 |
--------------------------------------------------------------------------------
/spring-modulith-observability/src/test/java/example/sample/SampleMessageListener.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2024-2025 the original author or authors.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package example.sample;
17 |
18 | import org.springframework.stereotype.Component;
19 |
20 | /**
21 | * @author Oliver Drotbohm
22 | */
23 | @Component
24 | class SampleMessageListener {
25 |
26 | @TestListener
27 | void listener() {}
28 | }
29 |
--------------------------------------------------------------------------------
/spring-modulith-observability/src/test/java/example/sample/SampleProperties.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2024-2025 the original author or authors.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package example.sample;
17 |
18 | import org.springframework.boot.context.properties.ConfigurationProperties;
19 |
20 | /**
21 | * @author Oliver Drotbohm
22 | */
23 | @ConfigurationProperties("sample")
24 | public class SampleProperties {}
25 |
--------------------------------------------------------------------------------
/spring-modulith-observability/src/test/java/org/springframework/modulith/observability/support/ModuleEventListenerUnitTests.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2025 the original author or authors.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package org.springframework.modulith.observability.support;
17 |
18 | /**
19 | *
20 | * @author Oliver Drotbohm
21 | */
22 | public class ModuleEventListenerUnitTests {
23 |
24 | }
25 |
--------------------------------------------------------------------------------
/spring-modulith-observability/src/test/resources/META-INF/spring.factories:
--------------------------------------------------------------------------------
1 | org.springframework.modulith.core.ApplicationModulesFactory=org.springframework.modulith.test.TestApplicationModules.Factory
2 |
--------------------------------------------------------------------------------
/spring-modulith-observability/src/test/resources/application.properties:
--------------------------------------------------------------------------------
1 | management.tracing.enabled=true
2 |
3 |
--------------------------------------------------------------------------------
/spring-modulith-observability/src/test/resources/logback.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | %d %5p %40.40c:%4L - %m%n
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/spring-modulith-runtime/src/main/java/org/springframework/modulith/runtime/autoconfigure/package-info.java:
--------------------------------------------------------------------------------
1 | /**
2 | * Autoconfiguration the {@link org.springframework.modulith.core.ApplicationModules} runtime support.
3 | */
4 | @org.jspecify.annotations.NullMarked
5 | package org.springframework.modulith.runtime.autoconfigure;
6 |
--------------------------------------------------------------------------------
/spring-modulith-runtime/src/main/java/org/springframework/modulith/runtime/package-info.java:
--------------------------------------------------------------------------------
1 | /**
2 | * Support to run {@link org.springframework.modulith.core.ApplicationModules} at application runtime.
3 | */
4 | @org.jspecify.annotations.NullMarked
5 | package org.springframework.modulith.runtime;
6 |
--------------------------------------------------------------------------------
/spring-modulith-runtime/src/main/resources/META-INF/NOTICE:
--------------------------------------------------------------------------------
1 | Spring Modulith ${project.version}
2 | Copyright (c) 2021-2024 Broadcom, Inc.
3 |
4 | This product is licensed to you under the Apache License, Version 2.0
5 | (the "License"). You may not use this product except in compliance with
6 | the License.
7 |
--------------------------------------------------------------------------------
/spring-modulith-runtime/src/main/resources/META-INF/spring.factories:
--------------------------------------------------------------------------------
1 | # Failure analyzers
2 | org.springframework.boot.diagnostics.FailureAnalyzer=\
3 | org.springframework.modulith.runtime.autoconfigure.MissingRuntimeDependencyFailureAnalyzer
4 |
--------------------------------------------------------------------------------
/spring-modulith-runtime/src/main/resources/META-INF/spring/aot.factories:
--------------------------------------------------------------------------------
1 | org.springframework.beans.factory.aot.BeanFactoryInitializationAotProcessor=\
2 | org.springframework.modulith.runtime.autoconfigure.ApplicationModulesFileGeneratingProcessor
3 |
--------------------------------------------------------------------------------
/spring-modulith-runtime/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports:
--------------------------------------------------------------------------------
1 | org.springframework.modulith.runtime.autoconfigure.SpringModulithRuntimeAutoConfiguration
2 |
--------------------------------------------------------------------------------
/spring-modulith-runtime/src/test/java/different/moduleB/ModuleBType.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2024-2025 the original author or authors.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package different.moduleB;
17 |
18 | /**
19 | * @author Oliver Drotbohm
20 | */
21 | public class ModuleBType {}
22 |
--------------------------------------------------------------------------------
/spring-modulith-runtime/src/test/java/example/SampleApplication.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2024-2025 the original author or authors.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package example;
17 |
18 | import org.springframework.boot.autoconfigure.SpringBootApplication;
19 | import org.springframework.modulith.Modulithic;
20 |
21 | /**
22 | * @author Oliver Drotbohm
23 | */
24 | @Modulithic(additionalPackages = "different")
25 | @SpringBootApplication
26 | public class SampleApplication {}
27 |
--------------------------------------------------------------------------------
/spring-modulith-runtime/src/test/resources/META-INF/spring-modulith/application-modules.json:
--------------------------------------------------------------------------------
1 | {
2 | "a" : {
3 | "initializers" : [ "org.springframework.modulith.runtime.autoconfigure.PrecomputedApplicationModuleInitializerInvokerUnitTests$FirstApplicationModuleInitializer" ]
4 | },
5 | "b" : {
6 | "initializers" : [ "org.springframework.modulith.runtime.autoconfigure.PrecomputedApplicationModuleInitializerInvokerUnitTests$SecondApplicationModuleInitializer" ]
7 | },
8 | "c" : {
9 | "initializers" : [ "org.springframework.modulith.runtime.autoconfigure.SpringModulithRuntimeAutoConfigurationIntegrationTests$SampleInitializer" ]
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/spring-modulith-runtime/src/test/resources/application.properties:
--------------------------------------------------------------------------------
1 | spring.main.banner-mode=OFF
2 |
--------------------------------------------------------------------------------
/spring-modulith-runtime/src/test/resources/logback.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/spring-modulith-starters/spring-modulith-starter-core/src/main/resources/META-INF/NOTICE:
--------------------------------------------------------------------------------
1 | Spring Modulith ${project.version}
2 | Copyright (c) 2021-2024 Broadcom, Inc.
3 |
4 | This product is licensed to you under the Apache License, Version 2.0
5 | (the "License"). You may not use this product except in compliance with
6 | the License.
7 |
--------------------------------------------------------------------------------
/spring-modulith-starters/spring-modulith-starter-insight/src/main/resources/NOTICE:
--------------------------------------------------------------------------------
1 | Spring Modulith ${project.version}
2 | Copyright (c) 2021-2024 Broadcom, Inc.
3 |
4 | This product is licensed to you under the Apache License, Version 2.0
5 | (the "License"). You may not use this product except in compliance with
6 | the License.
7 |
--------------------------------------------------------------------------------
/spring-modulith-starters/spring-modulith-starter-jdbc/src/main/resources/META-INF/NOTICE:
--------------------------------------------------------------------------------
1 | Spring Modulith ${project.version}
2 | Copyright (c) 2021-2024 Broadcom, Inc.
3 |
4 | This product is licensed to you under the Apache License, Version 2.0
5 | (the "License"). You may not use this product except in compliance with
6 | the License.
7 |
--------------------------------------------------------------------------------
/spring-modulith-starters/spring-modulith-starter-jpa/src/main/resources/META-INF/NOTICE:
--------------------------------------------------------------------------------
1 | Spring Modulith ${project.version}
2 | Copyright (c) 2021-2024 Broadcom, Inc.
3 |
4 | This product is licensed to you under the Apache License, Version 2.0
5 | (the "License"). You may not use this product except in compliance with
6 | the License.
7 |
--------------------------------------------------------------------------------
/spring-modulith-starters/spring-modulith-starter-mongodb/src/main/resources/META-INF/NOTICE:
--------------------------------------------------------------------------------
1 | Spring Modulith ${project.version}
2 | Copyright (c) 2021-2024 Broadcom, Inc.
3 |
4 | This product is licensed to you under the Apache License, Version 2.0
5 | (the "License"). You may not use this product except in compliance with
6 | the License.
7 |
--------------------------------------------------------------------------------
/spring-modulith-starters/spring-modulith-starter-neo4j/src/main/resources/META-INF/NOTICE:
--------------------------------------------------------------------------------
1 | Spring Modulith ${project.version}
2 | Copyright (c) 2021-2024 Broadcom, Inc.
3 |
4 | This product is licensed to you under the Apache License, Version 2.0
5 | (the "License"). You may not use this product except in compliance with
6 | the License.
7 |
--------------------------------------------------------------------------------
/spring-modulith-starters/spring-modulith-starter-test/src/main/resources/META-INF/NOTICE:
--------------------------------------------------------------------------------
1 | Spring Modulith ${project.version}
2 | Copyright (c) 2021-2024 Broadcom, Inc.
3 |
4 | This product is licensed to you under the Apache License, Version 2.0
5 | (the "License"). You may not use this product except in compliance with
6 | the License.
7 |
--------------------------------------------------------------------------------
/spring-modulith-test/src/main/java/org/springframework/modulith/test/PublishedEventsExtension.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2020-2025 the original author or authors.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package org.springframework.modulith.test;
17 |
18 | import org.junit.jupiter.api.extension.Extension;
19 |
20 | /**
21 | * JUnit 5 {@link Extension} for standalone usage without {@link ApplicationModuleTest}.
22 | *
23 | * @author Oliver Drotbohm
24 | */
25 | public final class PublishedEventsExtension extends PublishedEventsParameterResolver {
26 |
27 | }
28 |
--------------------------------------------------------------------------------
/spring-modulith-test/src/main/java/org/springframework/modulith/test/package-info.java:
--------------------------------------------------------------------------------
1 | /**
2 | * Integration test support for Spring Modulith {@link org.springframework.modulith.core.ApplicationModules}.
3 | */
4 | @org.jspecify.annotations.NullMarked
5 | package org.springframework.modulith.test;
6 |
--------------------------------------------------------------------------------
/spring-modulith-test/src/main/resources/META-INF/NOTICE:
--------------------------------------------------------------------------------
1 | Spring Modulith ${project.version}
2 | Copyright (c) 2021-2024 Broadcom, Inc.
3 |
4 | This product is licensed to you under the Apache License, Version 2.0
5 | (the "License"). You may not use this product except in compliance with
6 | the License.
7 |
--------------------------------------------------------------------------------
/spring-modulith-test/src/main/resources/META-INF/spring.factories:
--------------------------------------------------------------------------------
1 | org.springframework.test.context.ContextCustomizerFactory=\
2 | org.springframework.modulith.test.ModuleContextCustomizerFactory
3 |
--------------------------------------------------------------------------------
/spring-modulith-test/src/test/java/example/TestConfiguration.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2023-2025 the original author or authors.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package example;
17 |
18 | import org.springframework.boot.autoconfigure.SpringBootApplication;
19 | import org.springframework.scheduling.annotation.EnableAsync;
20 |
21 | @EnableAsync(proxyTargetClass = true)
22 | @SpringBootApplication
23 | public class TestConfiguration {}
24 |
--------------------------------------------------------------------------------
/spring-modulith-test/src/test/java/example/module/SampleTestA.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2025 the original author or authors.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package example.module;
17 |
18 | import org.springframework.modulith.test.ApplicationModuleTest;
19 |
20 | /**
21 | * @author Oliver Drotbohm
22 | */
23 | @ApplicationModuleTest
24 | public class SampleTestA {
25 |
26 | }
27 |
--------------------------------------------------------------------------------
/spring-modulith-test/src/test/java/example/module/SampleTestB.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2025 the original author or authors.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package example.module;
17 |
18 | import org.springframework.modulith.test.ApplicationModuleTest;
19 |
20 | /**
21 | * @author Oliver Drotbohm
22 | */
23 | @ApplicationModuleTest
24 | public class SampleTestB {}
25 |
--------------------------------------------------------------------------------
/spring-modulith-test/src/test/resources/META-INF/spring.factories:
--------------------------------------------------------------------------------
1 | org.springframework.modulith.core.ApplicationModulesFactory=org.springframework.modulith.test.TestApplicationModules.Factory
2 |
--------------------------------------------------------------------------------
/spring-modulith-test/src/test/resources/logback.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | %d %5p %40.40c:%4L - %m%n
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/src/docs/antora/antora-playbook.yml:
--------------------------------------------------------------------------------
1 | antora:
2 | extensions:
3 | - require: '@springio/antora-extensions'
4 | root_component_name: 'modulith'
5 | site:
6 | title: Spring Modulith
7 | url: https://docs.spring.io/spring-modulith/reference/
8 | content:
9 | sources:
10 | - url: ./../../..
11 | branches: HEAD
12 | start_path: src/docs/antora
13 | worktrees: true
14 | asciidoc:
15 | attributes:
16 | page-pagination: ''
17 | hide-uri-scheme: '@'
18 | tabs-sync-option: '@'
19 | chomp: 'all'
20 | kroki-fetch-diagram: true
21 | extensions:
22 | - asciidoctor-kroki
23 | - '@asciidoctor/tabs'
24 | - '@springio/asciidoctor-extensions'
25 | sourcemap: true
26 | urls:
27 | latest_version_segment: ''
28 | runtime:
29 | log:
30 | failure_level: warn
31 | format: pretty
32 | ui:
33 | bundle:
34 | url: https://github.com/spring-io/antora-ui-spring/releases/download/v0.4.17/ui-bundle.zip
35 |
--------------------------------------------------------------------------------
/src/docs/antora/antora.yml:
--------------------------------------------------------------------------------
1 | name: modulith
2 | version: true
3 | title: Spring Modulith
4 | nav:
5 | - modules/ROOT/nav.adoc
6 | ext:
7 | collector:
8 | run:
9 | command: mvnw -N antora-component-version:antora-component-version resources:resources -am -Pdocumentation
10 | local: true
11 | scan:
12 | dir: target/classes/antora-resources/
13 |
14 | asciidoc:
15 | attributes:
16 | attribute-missing: 'warn'
17 | chomp: 'all'
--------------------------------------------------------------------------------
/src/docs/antora/modules/ROOT/assets/images/event-publication-registry-end.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spring-projects/spring-modulith/d3f059dc70a108b2782f6dea19a06c7806b7f413/src/docs/antora/modules/ROOT/assets/images/event-publication-registry-end.png
--------------------------------------------------------------------------------
/src/docs/antora/modules/ROOT/assets/images/event-publication-registry-start.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spring-projects/spring-modulith/d3f059dc70a108b2782f6dea19a06c7806b7f413/src/docs/antora/modules/ROOT/assets/images/event-publication-registry-start.png
--------------------------------------------------------------------------------
/src/docs/antora/modules/ROOT/assets/images/observability.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spring-projects/spring-modulith/d3f059dc70a108b2782f6dea19a06c7806b7f413/src/docs/antora/modules/ROOT/assets/images/observability.png
--------------------------------------------------------------------------------
/src/docs/antora/modules/ROOT/nav.adoc:
--------------------------------------------------------------------------------
1 | * xref:index.adoc[Overview]
2 | * xref:fundamentals.adoc[]
3 | * xref:verification.adoc[]
4 | * xref:events.adoc[]
5 | * xref:testing.adoc[]
6 | * xref:moments.adoc[]
7 | * xref:documentation.adoc[]
8 | * xref:runtime.adoc[]
9 | * xref:production-ready.adoc[]
10 | * xref:appendix.adoc[]
11 |
--------------------------------------------------------------------------------
/src/docs/antora/modules/ROOT/partials/spring-modulith-events-jdbc-src:
--------------------------------------------------------------------------------
1 | ../../../../../../spring-modulith-events/spring-modulith-events-jdbc/src
--------------------------------------------------------------------------------
/src/docs/antora/resources/antora-resources/antora.yml:
--------------------------------------------------------------------------------
1 | version: ${antora-component.version}
2 | prerelease: ${antora-component.prerelease}
3 | asciidoc:
4 | attributes:
5 | attribute-missing: 'warn'
6 | version: ${project.version}
7 | projectversion: ${project.version}
--------------------------------------------------------------------------------
/src/docs/resources/assemblies/docs.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | docs
4 |
5 | dir
6 | zip
7 |
8 | false
9 |
10 |
11 |
14 | target/generated-docs
15 | reference
16 |
17 | **/.asciidoctor/**
18 |
19 |
20 |
21 |
24 | ../target/reports/apidocs
25 | api
26 |
27 |
28 |
29 |
--------------------------------------------------------------------------------