| ✅ maven-doxia-sitetools |
seam |
Resolve each site descriptor locale through one helper |
apache/maven-doxia-sitetools#703 |
| ✅ maven-doxia-sitetools |
seam |
Request skin and site descriptor artifacts from Resolver directly |
apache/maven-doxia-sitetools#704 |
| ✅ maven-doxia-sitetools |
seam |
Match skin prerequisites with Resolver's generic version scheme |
apache/maven-doxia-sitetools#706 |
| ✅ maven-doxia-sitetools |
cleanup |
Run SiteToolTest offline from a seeded local repository |
apache/maven-doxia-sitetools#702 |
| ✅ maven-reporting-impl |
cleanup |
Replace the deprecated API used in AbstractMavenReport |
apache/maven-reporting-impl#251 |
| ✅ plexus-archiver |
bug |
Archivers created without a container can unpack (ServiceLoaderArchiverManager) |
codehaus-plexus/plexus-archiver#500 |
| ✅ maven-dependency-tree |
cleanup |
Planned-retirement notice: the Maven 4 port showed it is mostly redundant with Resolver |
apache/maven-dependency-tree#151 |
| ✅ maven-common-artifact-filters |
bug |
ArtifactTransitivityFilter.transitiveArtifacts is never initialised, so its constructor throws NullPointerException on the first resolved dependency |
apache/maven-common-artifact-filters#131 |
| ✅ maven-resolver-ant-tasks |
bug |
AntRepoSys.getSettings() throws NullPointerException when settings.xml cannot be read |
apache/maven-resolver-ant-tasks#196 |
| ✅ maven-release |
bug |
The forked build's release-settings*.xml is written with FileWriter, in the platform charset, under a UTF-8 header |
apache/maven-release#1514 |
| ✅ maven-archetype |
bug |
DefaultPomManager merges dependencies in HashMap order |
apache/maven-archetype#1042 |
| ✅ maven-reporting-exec |
bug |
setReportPlugins shares the model's report list instead of copying it |
apache/maven-reporting-exec#168 |
| ✅ maven-changelog-plugin, maven-toolchains-plugin |
cleanup |
@Component → @Inject |
apache/maven-changelog-plugin#252, apache/maven-toolchains-plugin#202 |
| ✅ maven-ejb-plugin, maven-rar-plugin |
cleanup |
Unit tests on JUnit 5 without AbstractMojoTestCase |
apache/maven-ejb-plugin#242, apache/maven-rar-plugin#182 |
| ✅ maven-rar-plugin |
cleanup |
An IT with real dependencies: no IT had one, so a port that copied nothing stayed green |
apache/maven-rar-plugin#181 |
| ✅ several (acr, ejb, rar, enforcer, release, archetype) |
cleanup |
plexus-utils → JDK or commons-lang3 where the semantics are identical |
apache/maven-acr-plugin#156, apache/maven-ejb-plugin#241, apache/maven-rar-plugin#180, apache/maven-enforcer#1048, apache/maven-release#1516, apache/maven-archetype#1043 |
| ✅ maven-acr-plugin |
bug |
The user's excludes list is changed in place |
apache/maven-acr-plugin#155 |
| ✅ maven-acr-plugin |
seam |
Register the app-client artifact handler and lifecycle mapping as Sisu-indexed classes instead of Plexus components.xml, as maven-rar-plugin does |
apache/maven-acr-plugin#157 |
| ✅ maven-acr-plugin, maven-rar-plugin |
bug |
A project that loads the plugin through <build><extensions> runs the latest released packaging goal instead of the loaded one |
apache/maven-acr-plugin#157, apache/maven-rar-plugin#183 |
| ✅ maven-dependency-plugin, maven-project-info-reports-plugin |
cleanup |
Replace maven-dependency-tree with Maven Resolver |
apache/maven-dependency-plugin#1712, apache/maven-project-info-reports-plugin#670 |
| ✅ maven-enforcer |
bug |
EnforcerRuleUtils.resolvePlugins changes the effective model's Plugin objects in place |
apache/maven-enforcer#1046 |
| ✅ maven-enforcer |
deprecation |
Make the existing warning for EnforcerRule, EnforcerRule2 and EnforcerRuleHelper name enforcer 4.0.0 as the removal point |
apache/maven-enforcer#1047 |
| ✅ maven-jmod-plugin, maven-jdeprscan-plugin |
cleanup |
Drop the reflection around ToolchainManager.getToolchains, which the interface has |
apache/maven-jmod-plugin#121, apache/maven-jdeprscan-plugin#94 |
| ✅ maven-gpg-plugin |
deprecation |
settings parameter in favour of the session's settings |
apache/maven-gpg-plugin#346 |
Description
Porting the estate to the Maven 4 API (#13302) showed code on the current Maven 3 lines that is buggy, more complicated than it needs to be, or will make the later port harder. This issue tracks the changes that can land on the Maven 3 lines now: they behave the same on Maven 3, and each one shrinks or removes part of the future Maven 4 port. Every item comes from a finished port; its findings are on #13302.
Kinds: bug (found by a port, fix it now), cleanup (behaviour-neutral, smaller port later), deprecation (announce now what Maven 4 removes, so users get a release of warning), seam (a small internal refactor so the port only swaps one method body).
Status
✅ merged · 🔄 pull request open · ⬜ not started (updated 2026-10-07)
The
agent/mvn4-apibranches rebased on 2026-10-06 include the Done items for maven-acr-plugin, maven-dependency-plugin, maven-enforcer, maven-gpg-plugin and maven-reporting-exec; their findings are on #13302.Done
24 items
SiteToolTestoffline from a seeded local repositoryAbstractMavenReportServiceLoaderArchiverManager)ArtifactTransitivityFilter.transitiveArtifactsis never initialised, so its constructor throwsNullPointerExceptionon the first resolved dependencyAntRepoSys.getSettings()throwsNullPointerExceptionwhensettings.xmlcannot be readrelease-settings*.xmlis written withFileWriter, in the platform charset, under a UTF-8 headerDefaultPomManagermerges dependencies inHashMapordersetReportPluginsshares the model's report list instead of copying it@Component→@InjectAbstractMojoTestCaseexcludeslist is changed in placeapp-clientartifact handler and lifecycle mapping as Sisu-indexed classes instead of Plexuscomponents.xml, as maven-rar-plugin does<build><extensions>runs the latest released packaging goal instead of the loaded oneEnforcerRuleUtils.resolvePluginschanges the effective model'sPluginobjects in placeEnforcerRule,EnforcerRule2andEnforcerRuleHelpername enforcer 4.0.0 as the removal pointToolchainManager.getToolchains, which the interface hassettingsparameter in favour of the session's settingsIn progress
ArtifactHandlertokens such as@{packaging}@stop resolving on Maven 4Artifact-based skin methods inSiteRendererandSiteRenderingContext, with File/Path overloads${basedir}→${project.basedir}in parameter defaults of mojos that require a projectToolchainManager.getToolchains, which the interface hasDefaultReleaseManagerListener(Log)in favour of slf4j overloadsreactorProjects,repoSession,remoteProjectRepositories,siteTool,siteRendererin favour of getters; five report plugins read them directlyPluginToolsRequest.get/setRepoSession,PluginHelpGenerator.setVelocityComponentLocationManagerwithnewinstead of injecting itsettingsfield in favour of the session's settingsVelocityComponentwith a plainVelocityEnginejava.util.zipinstead of plexus-archiver'sArchiverManagercoreSession(request)/coreProject(request)helpersgetConfiguredRepositorywith an injectedSettingsDecrypterand drop maven-release-managerPom*view interfaces over the DomTrip classesDependencyGraphProject extends MavenProjectworkaroundArtifactContext.getPomModel()with a small value type (name, description, packaging); indexer-core then dropsmaven-modeland needs no Maven 4 portTo do
VelocityComponentwith a plainVelocityEngineinHelpGeneratorMojo, after apache/maven-plugin-tools#1223MarkdownHtmlParseris registered as aParserthrough its bare@Named, so every parser map lists it next to the real formats (apache/maven-doxia#1111)Not now
These wait for an API request on #13302 and must not be deprecated before a replacement exists: maven-common-artifact-filters
actTransitively; maven-dependency-tree premanaged getters and collector setters; enforcer rulesrequireUpperBoundDeps,banDynamicVersionsandrequireProfileIdsExist.Dropped: building an
ScmManager(apache/maven-scm#1418), the Doxia parser managers (apache/maven-doxia#1110) and aCompilerManager(codehaus-plexus/plexus-compiler#524) without Sisu throughServiceLoader. Once Maven 4 API mojos can inject Sisu components from their plugin realm throughjavax.inject(#13326, planned for 4.0.0-rc-8), the ports inject these managers as they do on Maven 3.Also dropped: a maven-archetype helper for the project reads in
FilesetArchetypeCreator. The Maven 4 port rewrites that class for immutable models anyway, so a helper would not make the port smaller.