⭐ New Features
- Overhaul event publication lifecycle #796 (Neo4j #1337, MongoDB #1336, JDBC #1321, JPA #1375, #1389)
- Support for application-module-specific Flyway migrations #1067, #1440
- Allow serialized execution of event externalization #1370
- Support for Jackson 3 in event serialization #1364, #1369
- Support to verify application module structure on startup #1287
- Migrate nullness verification to jSpecify #1192
- Propagate named interface assignments of types to return and parameter types of methods declared #1264
- Extract module description from a module's
package-info.javaJavadoc #1430 - Remove deprecated
@ApplicationEventListenerannotation #1397
💡 Improvements
- Prevent application module misconfiguration due to invalid additional packages #1251
- Expose additional application module metadata in
application-modules.json#1276 - Cleanup configuration metadata creation #1455
- Improve bootstrap procedure for
ApplicationModulesEndpoint#1338 - Unnecessary context bootstrap triggered for application module tests due to overly constrained
equals(…)andhashCode()inModuleTypeExcludeFilter#1216 - Register SQL schemas as native image resources #1449
- Reflection metadata missing in JSONPath lookup for application module identifiers on GraalVM #1254
- List module description before base package in canvas #1447
- Update version compatibility matrix in reference docs #1289
- Fix a typo in the overview docs #1294
- Fix typo in reference documentation #1394
- Improve Documentation on Change Aware Test Execution #1382
- Switch automatic Hexagonal Architecture verification to lenient mode #1366
- Resolve JUnit warnings regarding nested test classes [#1326](https://github.com/spring-projects/ spring-modulith/issues/1326)
- Constrain access to internally used methods of
ApplicationModuleSource#1283 - Remove legacy reflection-based event handling in
PersistentApplicationEventMulticaster#1356 - Update copyright year in
index.adoc#1368 - Polish deprecations in
PublishedEvents#1448
🪲 Bugs
- Forward classloader in
ConfigDataEnvironmentPostProcessorapplication inApplicationModuleDetectionStrategylookup #1435 - Potential
NullPointerExceptionin annotation detection inJavaPackage#1341 - Avoid
ConcurrentModificationExceptioninPackageName#1319 - Potential stack overflow when looking up a module's dependencies if it's part of a cycle #1299
ApplicationModules.toString()should list all dependencies, marking bootstrap dependencies #1285- Named interfaces leaking from submodules into parent ones #1279
- Inconsistent visibility of
NamedInterface.of(String name, Classes classes)#1272 - Repeated invocation of AOT phase breaks creation of
application-modules.json#1457 - Properly detect Maven test execution in
BuildSystemUtils#1432 - Properly disable APT execution for test sources when using KAPT #1386
- Exception during file creation from APT module #1263
- Incompatible path handling for KAPT with Maven #1209
- Invalid type reference in check for jMolecules Onion Architecture integration presence #1414
- Potential
NoClassDefFoundErrorwhen jMolecules DDD artifact is missing from the classpath #1333 TestExecutionConditionshould fall back to execute the test if more than one main class is found #1391- Potential
ConcurrentModificationExceptionwhen running@ApplicationModuleTesttests in parallel #1295 - Version compatibility of 1.4 should state Boot 3.5 at compile target #1331
- Remove reference to JGraphT from reference documentation #1288
🔨 Dependency Upgrades
- Upgrade to Spring Boot 4.0
- Upgrade to Spring Framework 7.0
- Upgrade to jMolecules 2025.0
- Upgrade to Structurizr 5
- Upgrade to ArchUnit 1.4.1
- Upgrade to Testcontainers 2.0
- Upgrade to Micrometer 1.6
- Upgrade to Micrometer Tracing 1.6
- Upgrade to NullAway 0.12.10
- Upgrade to jGit 7.4
- Upgrade to Cute 1.9.0
- Upgrade to APTK 0.30.5 #1372
❤️ Contributors
Thank you to all the contributors who worked on this release:
@jekutzsche, @kitt51, @patbaumgartner, @tlarbals824, and @val-beresneva