├── .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 | --------------------------------------------------------------------------------