This release candidate is expected to be the last before the Maven 4.0.0 GA release, which we aim to publish in the coming weeks, pending community feedback.
🚀 New features and improvements
- Log API enhancements and mojo MDC (#12690) @gnodet
- Optimize reactor sort and phase comparator performance (#12901) @gnodet
- Add AsyncDrainWriter to eliminate PrintWriter lock contention (#12892) @gnodet
- Add validation for Plexus-based plugin dependency injection (#12649) @slawekjaranowski
🔧 Maintenance
🐛 Bug Fixes
-
Improve standalone ApiRunner to properly apply settings (#13014) @gnodet
-
Strip executable() conditions from consumer POMs (#12960) @gnodet
-
Emit clear error when running JDK cannot compile source level (#12922) @gnodet
-
[mvnup] Add maven-war-plugin and maven-ear-plugin to plugin upgrade list (#12685) @gnodet
-
Fix #13191: add -Dmaven.maven3Personality hint to FATAL message for wrong parent relativePath (#13202) @gnodet
-
Fix #13200: publish a complete set from MavenProject.getArtifacts (#13203) @gnodet
-
Fix #13190: pre-build full reactor once using BUILD_PROJECT, drop temp dir in PluginUpgradeStrategy (#13197) @gnodet
-
Fix #13192: PomInlinerTransformer fails when CI-friendly property is defined in POM (#13195) @gnodet
-
Fix #13189: mvnup generates invalid JDK version constraint '(,-1]' (#13199) @gnodet
-
Fix mvnup compatibility: jar-plugin 3.4.2, exec-plugin submodule coverage, toolchain warning (#13179) @gnodet
-
Fixes #13135, ensure completude of the reactor summary but privilege failures to be last to stay human efficient (#13167) @gnodet
-
Fix glob patterns in exists()/missing() profile conditions on Windows (#13163) @gnodet
-
Fix #13084: sandbox profile activation context for external model builds (#13158) @gnodet
-
Fix: implement Node.getRepository() via local repository manager lookup (#13159) @gnodet
-
Fix #13100: honor repositories from legitimately-active external model profiles (#13155) @gnodet
-
[MNG-5146] - Fix parent relativePath mismatch check (#13157) @gnodet
-
Lower-case the OS family before matching it against the family names (#13154) @gnodet
-
Normalize lazy StAX parse failures in MavenXpp3Reader (#13149) @gnodet
-
Evaluate profile activation conditions lazily (#13144) @gnodet
-
[MNG-6979] - Initialize the current project from the execution root (#13143) @gnodet
-
Fix NPE on a recursive property reference in a list field (#13145) @gnodet
-
[MNG-6568] - Fix comparison cycles in version qualifiers (#13113) @gnodet
-
[MNG-8678] - Concurrent executor ignores java.lang.Error subclasses (#13067) @gnodet
-
Keep the basedir unset for a parent served from the project-local repository (#13212) @slachiewicz
-
Fix #13068: make PluginDependenciesResolver methods default (#13069) @ascheman
-
Fix filterByScope to expand lifecycle scopes for build ordering (#13070) @gnodet
-
Fix getDispatchedPaths() leaking mutable nested lists (#13057) @gnodet
-
[MNG-8174] - Fix NPE when a property references itself in a plugin configuration (#12935) @elharo
-
Fix #12985: Upgrade toolchains-plugin when adding select-jdk-toolchain execution (#13026) @gnodet
-
Fix ToolchainPluginStrategy to detect inherited source levels from parent POMs (#13025) @gnodet
-
Fix consumer POM leaving extension-contributed user properties uninterpolated (#13023) @gnodet
-
Fix #12986: Throw descriptive UnsupportedOperationException instead of NPE in MavenSession.lookup() (#13020) @gnodet
-
Fix #12989: mvnup plugin upgrades should respect project JDK version (#13024) @gnodet
-
[MNG-8633] - mvnup: inject standalone Nashorn for antrun JavaScript compatibility (#13022) @gnodet
-
mvnup: upgrade BND plugins to fix ConcurrentModificationException on JDK 17.0.13+ (#13021) @gnodet
-
[MNG-8765] - Pre-interpolate plugin configuration before type conversion (#13019) @gnodet
-
Fix #13004: enable deterministic profile activation for BUILD_CONSUMER (#13015) @gnodet
-
[MNG-8765] - Pre-interpolate plugin configuration before type conversion (#13017) @gnodet
-
Fix #12991: skip shade-plugin upgrade when custom ResourceTransformers are present (#13016) @gnodet
-
[MNG-12984] - Fix invalid Automatic-Module-Name entries in mvnup plugin upgrades (#13013) @gnodet
-
Fix compatibility spelling in CLI help text (#13012) @gnodet
-
[MNG-8708] - Fix parent inference (#13010) @gnodet
-
Scope server credentials and validate legacy relocation coordinates (#12977) @gnodet
-
Fix version comparison and parsing inconsistencies in maven-artifact (#12942) @slachiewicz
-
Validate metadata inputs across legacy and new API paths, clone proxies before decryption (#12945) @slachiewicz
-
[MNG-8450] - Report BOM import warnings only at declaration sites (#13003) @gnodet
-
[MNG-8287] - Fix consumer POM packaging profile resolution (#12967) @gnodet
-
Fix #12931: do not rewrite unmodified POMs in mvnup apply (#12972) @gnodet
-
Fix modello velocity phase for concurrent builder compatibility (#12963) @gnodet
-
Fix #12912: assign FastTerminal before starting the build thread (#12961) @gnodet
-
Fix #12774: skip consumer POM re-attachment on repeated task segments (#12916) @gnodet
-
Fix #12660: inherit version from imported BOM when local dep mgmt entry has no version (#12915) @gnodet
-
Fix #12912: use a dumb fallback terminal for all build-thread reentrant calls (#12921) @gnodet
-
Fix operator precedence skipping type=bom dependency imports (#12930) @gnodet
-
Fix: make ProjectIndex thread-safe for parallel builds (#12926) @gnodet
-
Fix #12602: Preserve Properties defaults in immutable copies (#12910) @goutamadwant
-
[MNG-8693] - Avoid resolving unused plugins for direct goals (#12920) @gnodet
-
Fix: interpolate properties in module/subproject path before filesystem resolution (#12924) @gnodet
-
Fix #12600: handle missing project index in forked executions (#12917) @gnodet
-
Re-include macOS JLine native libraries in distribution (#12888) @gnodet
-
Fix #2520: default maven.mainClass in Java instead of classworlds config (#12889) @gnodet
-
Fix #12646: project-local-repo clean race condition when root pom has parent (#12891) @gnodet
-
Wire ModelBuilderRequest.isLocationTracking() to XML parser (#12905) @gnodet
-
Fix #12590: NPE on null rootDirectory in DefaultModelBuilder (#12903) @gnodet
-
Fix #12749: suppress false ERROR in mvnsh for successful commands (#12896) @gnodet
-
Fix #12769: merge duplicate mirror repos to preserve snapshot policies (#12900) @gnodet
-
Fix #12868: Restore --define as long option for -D (#12899) @gnodet
-
Fix #12592: use string-based ID for forked execution cycle detection (#12898) @gnodet
-
Fix #12605: remove synchronized bottleneck in createProjectRealm() (#12897) @gnodet
-
Fix #12607: prevent session scope leak on MavenChainedWorkspaceReader constructor exception (#12895) @gnodet
-
Fix #12598: prevent StackOverflow from path representation mismatch in getEnhancedProperties (#12894) @gnodet
-
Fix field cache to let child class fields take precedence over parent (#12626) @gnodet
-
Fix #12685: Add tests for war/ear plugin upgrades, extract Quarkus tests (#12876) @gnodet
-
Preserve coordinates when merging InputLocation (#12806) @gnodet
-
Fix: synchronize ReflectionValueExtractor class-introspection caches (#12862) @gnodet
-
Fix duplicate model problem reporting, fixes #12691 (#12807) @gnodet
-
Fix ArtifactCoordinates.getId() double colon when classifier is empty (#12855) @gnodet
-
[MNG-8129] - Handle InvalidPathException for broken relativePath on Windows (#12849) @gnodet
-
Fix #12761: do not wait for the terminal on the thread building it (#12854) @gnodet
-
Make run-its profile extract the built distribution (#12852) @gnodet
-
[MDEP-590] - Resolve classified POM artifacts from the reactor (#12831) @wilx
-
[MNG-8709] - Use active profile properties for consumer POM validation (#12684) @goutamadwant
-
Fix #12730: quiet mode implies raw streams to avoid stdout decoration (#12830) @gnodet
-
Fix #12640: BOM consumer POM must not include inherited dependency management (#12802) @gnodet
-
[MNG-8129] - Handle InvalidPathException for broken relativePath on Windows (#12741) @gnodet
-
Make profile activation conditions locale-independent (#12798) @gnodet
-
Fix parent profile cache matching across activation contexts (#12801) @gnodet
-
fix(api-core): properly implement Clock.withZone() in MonotonicClock (#12797) @gnodet
-
Support the logical not operator in profile activation conditions (#12799) @gnodet
-
Fix BuildPlanExecutor thread pool leak on constructor failure (#12800) @gnodet
-
Fix #12704: Do not report an independent, built module as skipped (#12706) @slachiewicz
-
Fix SubList.get() accepting an index equal to its own size (#12656) @renechoi
📝 Documentation updates
- Fix default-bindings doc snippet to reference PluginVersions (#13140) @gnodet
- Fix #11504: add replacement guidance to deprecated model and settings APIs (#12890) @gnodet
- Port the site documentation from APT to Markdown (#12711) @slachiewicz
- consistency on Maven 4 vs 3 vs 2 references (#12642) @hboutemy
👻 Maintenance
- Fixes #13135: address review on reactor summary (UNKNOWN group, local StringBuilder) (#13181) @gnodet
- chore: add toolbox:plugin-versions workflow for lifecycle plugin versions (#13172) @gnodet
- Replace static TestSuiteOrdering registry with dynamic class orderer (#13169) @gnodet
- Implement getOutputPath() in the site IT plugin (#13096) @slachiewicz
- Update NOTICE file in distribution packages (#13043) @slawekjaranowski
- Optimize computeLocations() and simplify ModelObjectPool location handling (#13042) @gnodet
- deps: Bump Mimir to 0.12.3 (#13048) (#13049) @cstamas
- Restrict what a repository-resolved model contributes to the build (#12943) @slachiewicz
- Output, transport and consumer POM robustness fixes (#12946) @slachiewicz
- Validate coordinates and repository precedence during artifact resolution (#12944) @slachiewicz
- Fix flaky FastTerminalReentrancyTest by avoiding PTY creation (#12971) @gnodet
- Replace deprecated Terminal.getWidth/getHeight with getColumns/getRows (#12969) @gnodet
- [MNG-8129] - Clarify relativePath validation comment (#12965) @gnodet
- Add integration test for #12660: BOM version from imported BOM (#12940) @gnodet
- Use try-with-resources for AuthenticationContext (#12844) @slachiewicz
- Fix deprecated Maven testing API compatibility (#12683) @goutamadwant
- Move the core IT suite off the JUnit 4 assertions (#12719) @slachiewicz
- Remove workaround for creating site output directory (#12715) @slawekjaranowski
- Build and deploy through the wrapper on Jenkins (#12677) @slachiewicz
- Build the wrapper job with Maven 4.0.0-rc-6 (#12675) @slachiewicz
🔧 Build
- Replace nicoulaj checksum plugin with maveniverse checksum plugin (#13052) @slawekjaranowski
- Upgrade the IT suite to Jetty 12.1.12 and the core Jetty API (#12693) @slachiewicz
- Restore the Google Cloud mirror for CI resolution (#12701) @slachiewicz
📦 Dependency updates
- chore: update Maven lifecycle plugin versions (#13187) @github-actions[bot]
- Maven Resolver 2.0.23 (#13168) @cstamas
- Bump net.bytebuddy:byte-buddy from 1.18.13 to 1.18.14 (#13178) @dependabot[bot]
- Bump org.codehaus.mojo:build-helper-maven-plugin from 3.6.1 to 3.6.2 (#13133) @dependabot[bot]
- Bump org.codehaus.mojo:exec-maven-plugin from 3.6.3 to 3.6.4 (#13131) @dependabot[bot]
- Bump org.codehaus.mojo:buildnumber-maven-plugin from 3.3.0 to 3.3.1 (#13128) @dependabot[bot]
- Bump org.codehaus.mojo:extra-enforcer-rules from 1.12.0 to 1.12.1 (#13123) @dependabot[bot]
- Bump jlineVersion from 4.4.3 to 4.4.5 (#13220) @dependabot
- Bump domtripVersion from 1.6.0 to 1.7.0 (#13221) @dependabot
- Bump jlineVersion from 4.4.2 to 4.4.3 (#13109) @dependabot[bot]
- Bump actions/setup-java from 6.0.0 to 6.0.1 (#13108) @dependabot[bot]
- Bump org.apache.maven.plugin-tools:maven-plugin-annotations from 3.15.2 to 3.16.0 (#13088) @dependabot[bot]
- Bump org.apache.maven.plugin-tools:maven-plugin-tools-java from 3.15.2 to 3.16.0 (#13090) @dependabot[bot]
- Bump slf4jVersion from 2.0.18 to 2.0.19 (#13073) @dependabot[bot]
- Bump jlineVersion from 4.4.1 to 4.4.2 (#13063) @dependabot[bot]
- Bump com.github.siom79.japicmp:japicmp-maven-plugin from 0.26.1 to 0.26.2 (#13064) @dependabot[bot]
- Bump net.bytebuddy:byte-buddy from 1.18.12 to 1.18.13 (#13065) @dependabot[bot]
- Bump jlineVersion from 4.4.0 to 4.4.1 (#13038) @dependabot[bot]
- Bump org.codehaus.modello:modello-maven-plugin from 2.8.0 to 2.8.1 (#13029) @dependabot[bot]
- Bump net.sourceforge.pmd:pmd-core from 7.26.0 to 7.27.0 (#12980) @dependabot[bot]
- Bump jlineVersion from 4.3.1 to 4.4.0 (#12884) @gnodet
- Bump actions/setup-java from 5.7.0 to 6.0.0 (#12859) @dependabot[bot]
- Bump org.codehaus.plexus:plexus-xml from 4.1.1 to 4.2.0 (#12839) @dependabot[bot]
- Deps: Bump to Resolver 2.0.22 (#12804) @cstamas
- Bump org.codehaus.plexus:plexus-interactivity-api from 1.5.1 to 1.6.0 (#12840) @dependabot[bot]
- Bump com.google.jimfs:jimfs from 1.3.1 to 1.3.2 (#12838) @dependabot[bot]
- Bump org.codehaus.plexus:plexus-testing from 2.1.0 to 2.2.0 (#12820) @dependabot[bot]
- Bump org.codehaus.plexus:plexus-interpolation from 1.29 to 1.30.0 (#12824) @dependabot[bot]
- Bump org.codehaus.plexus:plexus-utils from 3.6.0 to 3.6.2 (#12826) @dependabot[bot]
- Bump org.codehaus.plexus:plexus-classworlds from 2.12.0 to 2.12.1 (#12827) @dependabot[bot]
- Bump eu.maveniverse.maven.mimir:testing from 0.12.0 to 0.12.1 (#12727) @dependabot[bot]
- Bump com.google.guava:guava from 33.7.0-jre to 33.7.1-jre (#12790) @dependabot[bot]
- Bump org.codehaus.plexus:plexus-velocity from 2.3.0 to 2.4.0 (#12788) @dependabot[bot]
- Bump org.codehaus.plexus:plexus-sec-dispatcher from 4.1.0 to 4.2.0 (#12791) @dependabot[bot]
- Bump org.codehaus.modello:modello-maven-plugin from 2.7.0 to 2.8.0 (#12789) @dependabot[bot]
- Bump com.google.guava:guava from 33.6.0-jre to 33.7.0-jre (#12777) @dependabot[bot]
- Bump net.bytebuddy:byte-buddy from 1.18.11 to 1.18.12 (#12773) @dependabot[bot]
- Bump eu.maveniverse.maven.plugins:bom-builder3 from 1.3.3 to 1.3.4 (#12764) @dependabot[bot]
- Bump ch.qos.logback:logback-classic from 1.6.2 to 1.6.3 (#12758) @dependabot[bot]
- Bump ch.qos.logback:logback-classic from 1.6.1 to 1.6.2 (#12752) @dependabot[bot]
- Bump com.fasterxml.woodstox:woodstox-core from 7.2.1 to 7.2.2 (#12689) @dependabot[bot]
- Bump xmlunitVersion from 2.12.0 to 2.13.0 (#12672) @dependabot[bot]
- Bump actions/setup-java from 5.6.0 to 5.7.0 (#12665) @dependabot[bot]
- Bump ch.qos.logback:logback-classic from 1.6.0 to 1.6.1 (#12580) @dependabot[bot]