What's new and breaking changes
- Kotlin 1.8
- Experimental Support for Kotlin Symbol Processing (KSP)
- Apache Groovy 4.0
- Support for Virtual Threads
- Filter Methods
- Injection of Maps
- Improved Error Messages for Missing Beans
- Tracking of Disabled Beans
micronaut-retry
dependency.micronaut-discovery
dependency.micronaut-websocket
dependency.- Reactor instrumentation moved to Reactor module.
- Validation support moved to validatio module
- session support moved to session module.
- kotlin flow support moved to kotlin module.
- Compilation time Api split into a new module
micronaut-core-processor
- ASM no longer shaded
- Caffeine no longer shaded
- Environment deduction disabled by default.
- SnakeYAML no longer a direct dependency
What's Changed
Breaking Changes π
- Make SnakeYAML and javax.annotation optional by @graemerocher in #8061
- Refactor
ConversionService
to remove mutable operations fromConversionService.SHARED
by @dstepanov in #8156 - Disable Cloud environment deduction by default. Fixes #7758 by @graemerocher in #8068
- Rework BOM as core BOM by @melix in #8299
- Remove the session module, and add micronaut-session by @timyates in #8281
New Features π
- Virtual thread support by @yawkat in #8180
- Introduce
@Vetoed
to exclude particular classes, methods and fields from processing by @dstepanov in #8274 - Implement support for injection of maps by @graemerocher in #8305
- Support arbitrary nesting of EachProperty/ConfigurationProperties beans by @graemerocher in #8424
- Adds support for KSP by @graemerocher in #8462
- Support annotation-based HTTP filter declarations by @yawkat in #8422
- Include disabled bean info in beans endpoint by @graemerocher in #8792
- feat: HTTP Client Implementation with Java HTTP Client by @sdelamo in #8441
- HTTP/3 support by @yawkat in #8559
Bug Fixes π
- Remove use of shadow plugin by @melix in #8312
- Stop conversion of Properties keys and values by @timyates in #8327
- Groovy properties shouldn't become executable methods by @graemerocher in #8350
- Fix bug in introspections when properties are of mixed types by @graemerocher in #8451
- Don't include write only properties in serialization by @graemerocher in #8457
- Fix bug with custom conditions and EachBean definitions by @graemerocher in #8459
- Fix incorrect dependency substitution by @melix in #8467
- fix configuration inheritance path calculation by @graemerocher in #8484
- Fix NonUniqueBeanException when using FunctionInitializer by @graemerocher in #8488
- Remove usage of Utils classes from GraalReflectionConfigurer by @graemerocher in #8563
- Pick a more specific setter if child configuration properties by @graemerocher in #8578
- Fix NPE producing anntotion metadata for KSP by @graemerocher in #8736
- Fix GraalVM native image support by @graemerocher in #8793
- fix validation of write-only config properties by @graemerocher in #8826
- Fix broken MethodElement.overrides implementation by @graemerocher in #8842
- fix IncompatibleClassChangeError in ConfigurationProperties by @graemerocher in #8864
- fix: WebSocketMessageEncoder @requires classes by @sdelamo in #8962
Improvements β
- Stop repackaging Caffeine by @graemerocher in #8054
- One channel per HTTP2 stream by @yawkat in #6842
- Match interceptors by all the bindings it defines by @dstepanov in #8174
- Let SemanticVersion.isAtLeastMajorMinor be able to compare two different major versions. by @donbeave in #8208
- Reuse enclosed elements querying for Java and Groovy. Added a way to query methods and fields together. by @dstepanov in #8197
- HTTP Netty server executing route refactoring by @dstepanov in #8217
- Split the runtime and compiler code into separate modules by @graemerocher in #8224
- Split the runtime module into multiple modules by @graemerocher in #8235
- Class -> Class<?> by @altro3 in #8278
- Add support for Jakarta nulllable annotations. by @baracil in #8307
- remove javax.annotation.Nullable usage by @graemerocher in #8311
- Improve support for configuration property nesting by @graemerocher in #8306
- Improve the error message for missing beans when EachBean is used by @graemerocher in #8316
- Improve error messages for disabled beans by @graemerocher in #8326
- Detect deadlocks when using BlockingHttpClient on the event loop by @yawkat in #8354
- Remove NoInjectBeanDefinition and improve/refactor RuntimeBeanDefinition by @graemerocher in #8398
- Eliminate unused proxy targets and simplify resolution by @graemerocher in #8447
- Add tests and refine behaviour of registerSingleton by @graemerocher in #8469
- add isWithin(..) check to each property handling by @graemerocher in #8565
- Support Range requests when returning SystemFiles by @kgeri in #8553
- Optimize HttpRequestCertificateHandler by @yawkat in #8771
- Refactor: Remove unnecessary use of reactive APIs in routes endpoint by @graemerocher in #8795
- Remove more GraalVM build-time init flags by @graemerocher in #8841
- cleanup unnecessary GraalVM flags by @graemerocher in #8843
- Remove jackson databind as a transtive of GraalVM module by @graemerocher in #8869
- Allow to introspect classes by names by @dstepanov in #8899
Docs π
- Configuration props for inner classes are now dollar prefixed by @timyates in #8183
- EntityIntrospectedAnnotationMapper class has moved by @timyates in #8244
- Add documentation for virtual thread support by @yawkat in #8577
- Update docs to the new configuration macro by @melix in #8613
- doc: Highlight virtual threads support by @sdelamo in #8734
- doc: use asciidoc inner link by @sdelamo in #8732
- doc: links to session module by @sdelamo in #8788
- Configuration asciidoc macro migration by @wetted in #8745
- Update simple retry doc to mention a linear progression of 1s by @miguelaferreira in #8850
- Remove docs for HTTP sessions and provide link to
micronaut-session
docs by @wetted in #8737 - doc: delete whatβs new and breaks prior to 4.0.0 by @sdelamo in #8952
- doc: add websocket dependency by @sdelamo in #8953
- docs: what's new add support Kotlin 1.8.0 by @sdelamo in #8785
- doc: Add KSP section and mention it in what's new by @sdelamo in #8786
- doc: introduction mention server & client runtimes by @sdelamo in #8960
- doc: retry dependency in Advice & HTTP client by @sdelamo in #8961
Dependency updates π
- fix(deps): update dependency io.micronaut.crac:micronaut-crac-bom to v1.0.1 by @renovate in #8081
- chore(deps): update plugin me.champeau.jmh to v0.6.8 by @renovate in #8078
- fix(deps): update junit5 monorepo to v5.9.1 by @renovate in #8103
- chore(deps): update mikepenz/action-junit-report action to v3.5.1 by @renovate in #8101
- fix(deps): update managed-testcontainers to v1.17.5 by @renovate in #8105
- fix(deps): update managed-swagger to v2.2.3 by @renovate in #8104
- fix(deps): update dependency io.micronaut.graphql:micronaut-graphql to v3.2.0 by @renovate in #8106
- fix(deps): update managed-kotlin to v1.7.20 by @renovate in #7855
- fix(deps): update dependency io.micronaut.email:micronaut-email-bom to v1.4.0 by @renovate in #8136
- fix(deps): update asm to v9.4 by @renovate in #8133
- fix(deps): update dependency io.micronaut.coherence:micronaut-coherence-bom to v3.7.1 by @renovate in #8135
- fix(deps): update dependency org.codehaus.groovy:groovy-test to v3.0.13 by @renovate in #8132
- fix(deps): update dependency com.fasterxml.jackson.core:jackson-databind to v2.13.4.2 by @renovate in #8168
- chore(deps): update mikepenz/action-junit-report action to v3.5.2 by @renovate in #8166
- chore(deps): update dependency io.micronaut.build.internal:micronaut-gradle-plugins to v5.3.15 by @renovate in #8165
- fix(deps): update managed-micrometer to v1.9.5 by @renovate in #8207
- fix(deps): update dependency io.projectreactor:reactor-core to v3.4.24 by @renovate in #8205
- fix(deps): update dependency io.micronaut.redis:micronaut-redis-bom to v5.3.1 by @renovate in #8204
- fix(deps): update managed-swagger to v2.2.4 by @renovate in #8209
- fix(deps): update groovy monorepo to v4.0.6 by @renovate in #8206
- chore(deps): update dependency org.tomlj:tomlj to v1.1.0 by @renovate in #8211
- fix(deps): update dependency io.micronaut.testresources:micronaut-test-resources-bom to v1.1.3 by @renovate in #8254
- upgrade Jackson version to 2.14.0 by @graemerocher in #8358
- build: bump up slf4j to 2.0.4 and logback to 1.4.4 by @graemerocher in #8360
- fix(deps): update dependency ch.qos.logback:logback-classic to v1.4.5 by @renovate in #8372
- fix(deps): update dependency com.github.javaparser:javaparser-symbol-solver-core to v3.24.9 by @renovate in #8477
- fix(deps): update dependency com.blazebit:blaze-persistence-core-impl to v1.6.8 by @renovate in #8460
- fix(deps): update netty monorepo to v4.1.86.final by @renovate in #8379
- fix(deps): update dependency io.micrometer:micrometer-core to v1.10.2 by @renovate in #8381
- fix(deps): update dependency com.fasterxml.jackson.core:jackson-databind to v2.14.1 by @renovate in #8396
- fix(deps): update httpcomponents-client to v4.5.14 by @renovate in #8536
- Update dependency io.micronaut.tracing:micronaut-tracing-bom to v4.5.0 by @renovate in #8554
- build: micronau-tracing 4.5.0 by @sdelamo in #8672
- build: micronau-tracing 4.5.0 by @sdelamo in #8700
- build: Apache groovy 4.0.9 by @sdelamo in #8784
- chore(deps): update dependency gradle to v7.6.1 by @renovate in #8832
- build: Micronaut Flyway 5.5.0 by @sdelamo in #8887
- Upgrade to Micronaut Spring 4.5.1 by @graemerocher in #8910
- fix(deps): update dependency ch.qos.logback:logback-classic to v1.4.6 by @renovate in #8964
Regressions π§
GraalVM π
- Lazily create the singleton stream-pipeline attribute to fix native image by @timyates in #8125
- Allow context annotations at build time by @timyates in #8485
- Run the HTTP TCK against Netty natively by @graemerocher in #8865
- Allow Tag annotation at build time for the TCK by @timyates in #8904
Other Changes π‘
- Upgrade H2 for CVE-2022-23221 by @cristianrgreco in #7000
- Bump managed kotlin version to 1.7.10 by @wetted in #8074
- Remove deprecated code in Micronaut Core for 4.0.x (partial) by @wetted in #8089
- Update to Groovy 4.0 by @timyates in #8010
- Stop relocating caffeine by @timyates in #8143
- Rewrite of Bean Definition processing to use it for both Java and Groovy by @dstepanov in #8121
- Support custom HTTP status codes by @yawkat in #8147
- Allow for Bean Introspection to use different accessor for read and write. by @dstepanov in #8148
- Fix HttpClient.start by @yawkat in #8155
- Fix
ClassElement
equals with primitive and bean property type by @dstepanov in #8163 - Fix STREAM_PIPELINE_ATTRIBUTE by @yawkat in #8162
- Fix use-case when
@Introspected
is added usinganotate
by @dstepanov in #8158 - Correct validation detection by @dstepanov in #8175
- Use v6.0.1 of the internal build tools by @timyates in #8154
- Remove JacksonConfig construtor from HateoasErrorResponseProcessor by @timyates in #8186
- Fix NPE in Groovy processing by @dstepanov in #8182
- New HTTP client connection pooling by @yawkat in #8100
- Support http status 103 and 425 by @SplotyCode in #8123
- Use bean property writer type as the property type. Correct annotations creation for fields. by @dstepanov in #8223
- Select possibly the property field's type if it has type annotations by @dstepanov in #8225
- Fix detecting bean for @ConfigurationInject injection by @dstepanov in #8234
- Require asm as an api dependency so it's pulled in transitively downstream by @timyates in #8243
- Don't relocate ASM references by @graemerocher in #8246
- Improve binary incompatibility for existing processors by @graemerocher in #8250
- build: remove replacement not necessary for 4.0.x by @sdelamo in #8260
- Port fix to 4.0.x and cleanup code by @graemerocher in #8262
- Use serialization and reactor snapshots by @graemerocher in #8266
- Switch to using snapshot of micronaut-groovy by @timyates in #8268
- Fix querying generic arguments by @dstepanov in #8267
- Fix configuration classes with optional getters by @dstepanov in #8269
- Cleanup context after test finishes by @timyates in #8271
- address sonar issues by @graemerocher in #8270
- Removal of Jakarta JSON Glassfish by @graemerocher in #8272
- Add byte[] to String converter by @dstepanov in #8273
- Correct how function method is recognized by @dstepanov in #8283
- Fail when the request is with the incorrect type by @dstepanov in #8261
- Add passing snapshot modules to BOMs by @timyates in #8286
- build: security and email as SNAPSHOT by @sdelamo in #8298
- fix sonar issues by @graemerocher in #8304
- Property type: select the type with the most generic argument annotations by @dstepanov in #8302
- Introduce workaround for javadoc generation by @melix in #8324
- Fix Java generic placeholder annotations by @dstepanov in #8331
- Correct configuration builder and recognition of the property's field by @dstepanov in #8319
- Fix NoSuchMethodError when calling getGenericBeanType() by @graemerocher in #8351
- git: merge up 3.8.x into master by @sdelamo in #8363
- Exclude maven copy of aop for testRuntime by @timyates in #8369
- Fix introduction method order by @dstepanov in #8386
- Make Snakeyaml a managed dependency by @timyates in #8390
- Warn when bean definition class is excluded because of the error by @dstepanov in #8385
- Refactor bean processing module after inject module split by @dstepanov in #8394
- Fix http2 client log warning by @yawkat in #8400
- Improve
BeanDefinitionDelegate
attributes modification by @dstepanov in #8403 - Remove parent module by @melix in #8405
- Add logback as a managed dependency by @timyates in #8388
- Add field generic argument annotation test by @dstepanov in #8409
- Fix Java error element reporting by @dstepanov in #8418
- Fix log error by @yawkat in #8437
- Improve pospone error message by @dstepanov in #8445
- Correct validation by @dstepanov in #8439
- Upgrade to Micronaut Build 6.1.1 by @melix in #8452
- Fix issue injecting qualifier into interceptor by @graemerocher in #8453
- Fix broken ServiceHttpClientCondition by @graemerocher in #8456
- remove the transitive dependency on Guava from core-processor by @graemerocher in #8466
- Add reactor-test as a managed dependency by @timyates in #8470
- Route processing refactor by @yawkat in #8463
- 4.0.x merge by @yawkat in #8492
- Fix intercepted adapter methods by @dstepanov in #8496
- Refactor and cleanup bean context by @dstepanov in #8479
- Fix delegating to intercepted method in Kotlin by @dstepanov in #8498
- Improve intercepted adapter tests by @dstepanov in #8503
- Fix each bean interceptor's qualifier by @dstepanov in #8508
- Fix each bean with a bean annotated
@Named
and@Primary
by @dstepanov in #8510 - Fix intercepted adapter invocation is invoked on the annotated method by @dstepanov in #8515
Publishers#convertPublisher
needs to useConversionService
by @dstepanov in #8517- Use
ConversionService
from bean context forInterceptedMethod
by @dstepanov in #8521 - Remove
FilerOutputStream
inefficiency workaround by @dstepanov in #8529 - Fix
@EachBean
with@Replaces
and a missing class by @dstepanov in #8530 - Merge branch '3.9.x' into 4.0.x by @sdelamo in #8568
- init at build time before instantiating reference by @graemerocher in #8576
- Move to Geb 7 for Groovy 4 support by @timyates in #8575
- Set kotlinOptions.jvmTarget to 17 for 4.0.0 by @timyates in #8579
- build: enable binary compatiblity by @sdelamo in #8571
- Remove unneeded PROXY_TARGET_QUALIFIER by @dstepanov in #8589
- Load bean listeners lazily by @dstepanov in #8595
- Add default annotation values test + remove unused method by @dstepanov in #8611
- Performance improvements + Java style improvements by @dstepanov in #8586
- Fix adding repeatable annotations by @dstepanov in #8618
- Use
PropertyExpressionResolver
for implementing random property values by @dstepanov in #8614 - Links to bootstrap configuration in documentation by @rogervinas in #8609
- Fix NPE in isCandidateBean by @dstepanov in #8631
- Rewrite
AbstractAnnotationMetadataBuilder
bugfixes and tests by @dstepanov in #8632 - Move mutable operations out of the default annotation metadata. Cleanup. by @dstepanov in #8664
- improve KSP error handling by @graemerocher in #8666
- Fix NPE in bean context by @dstepanov in #8665
- add test for #4887 by @graemerocher in #8655
- Don't process overridden interface methods in introduction advice by @graemerocher in #8662
- Add discovery 3.3.0 BOM to build [skip ci] by @timyates in #8659
- build: add back managed-micronaut-discovery by @sdelamo in #8702
- Merge up 3.9.x into 4.0.x by @sdelamo in #8701
- Merge branch '3.9.x' into 4.0.x by @sdelamo in #8726
- Fixes for generic type arguments and their annotations by @dstepanov in #8630
- Run coretto on version named branches by @timyates in #8722
- Correct messaging event publishing by @dstepanov in #8723
- Groovy annotations and generic improvements by @dstepanov in #8740
- don't run listeners for bean providers by @graemerocher in #8742
- Correct how annotations are propagated for generics and build method β¦ by @dstepanov in #8743
- Implement more lenient restrictions on mixed types for getters/setters by @graemerocher in #8757
- Move away from annotation API that now returns defaults by @graemerocher in #8776
- Deflake the BinaryWebSocketSpec by @timyates in #8725
- Support type annotations for Java & Groovy by @dstepanov in #8764
- Fix regression where AliasFor is no longer recursive by @graemerocher in #8746
- Merge branch '3.9.x' into 4.0.x by @sdelamo in #8787
- Fix Object lookup with Groovy. Fixes #8782 by @graemerocher in #8791
- Remove bad merge by @timyates in #8797
- try fix some sonar issues by @graemerocher in #8796
- Deprecate FilterOrderProvider by @yawkat in #8624
- javadoc: remove {@code @NonNullApi} by @sdelamo in #8814
- Rollback changes that have broken Micronaut Serialization by @graemerocher in #8817
- Adding test for headers to verify conformance to HTTP/1.1 4.2 Message Headers specification by @wetted in #8806
- Cleanup GraalVM metadata and used Metadata Repository by @graemerocher in #8821
- Buffered JSON parsing by @yawkat in #8803
- Support type annotations for KSP, generics improvements and bugfixes. by @dstepanov in #8837
- Correct annotating a property for KSP and improve method element annotations by @dstepanov in #8847
- Remove incorrect visitor reference by @dstepanov in #8858
- Replace the validation module with Micronaut Validation dependency by @dstepanov in #8863
- Fallback to trying to load visitor annotations from type by @graemerocher in #8870
- Prepare for Jakarta validation by @dstepanov in #8871
- Correct processing of the inner classes by @dstepanov in #8879
- build: Micronaut Azure 3.9.0 by @sdelamo in #8889
- Support private access for introspected beans by @dstepanov in #8890
- Fix version parsing by @melix in #8897
- Add back the platform for the server-tck tests by @timyates in #8898
- ci: remove build scan url step by @sdelamo in #8909
- Run Corretto nightly instead of every merge by @timyates in #8924
- Migrate to Jakarta validation by @dstepanov in #8916
- Address sonar bugs and smells in 4.0.x branch by @graemerocher in #8928
- Removed mention of default null check behaviour from javadoc by @sorin-silaghi in #8820
- build: remove dependency to validation dependency from core by @sdelamo in #8914
- Include stereotypes into the mapped/remapped annotation value, keep
@Inherited
by @dstepanov in #8932 - Allow for configuration beans to have interceptors by @dstepanov in #8936
- Enable test for streaming h2c requests by @yawkat in #8406
- Merge branch '3.9.x' into '4.0.x' by @sdelamo in #8947
- Allow to directly synthesize the annotation value by @dstepanov in #8949
- Correctly propagate annotations default by @dstepanov in #8943
- docs: validation module by @sdelamo in #8957
- ci: Github Actions Sync by @sdelamo in #8970
New Contributors
- @cristianrgreco made their first contribution in #7000
- @donbeave made their first contribution in #8208
- @baracil made their first contribution in #8307
- @kgeri made their first contribution in #8553
- @rogervinas made their first contribution in #8609
- @miguelaferreira made their first contribution in #8850
- @sorin-silaghi made their first contribution in #8820
Full Changelog: v3.8.7...v4.0.0-M1