Skip to content

Fix #11796: Preserve default-phases bindings for standard lifecycle phases#11889

Open
gnodet wants to merge 1 commit intomasterfrom
ci-issue-11796
Open

Fix #11796: Preserve default-phases bindings for standard lifecycle phases#11889
gnodet wants to merge 1 commit intomasterfrom
ci-issue-11796

Conversation

@gnodet
Copy link
Copy Markdown
Contributor

@gnodet gnodet commented Apr 3, 2026

Summary

  • Fixes #11796: Maven 4 ignores <default-phases> from components.xml when plugin goals are bound to standard lifecycle phases (e.g., process-sources)
  • The root cause was in LifecycleWrapperProvider.wrap() which only created Phase objects for the custom lifecycle's own phase names, ignoring defaultPhases entries that reference standard lifecycle phases
  • The fix includes the defaultPhases entries for standard phases as additional phases in the wrapped API Lifecycle, and overrides v3phases() to return only the custom lifecycle's own phases (so computePhases() is unaffected)

Changes

  • DefaultLifecycleRegistry.java: Modified LifecycleWrapperProvider.wrap() to include defaultPhases entries for standard lifecycle phases in phases(), overrides v3phases() to isolate custom phases
  • DefaultLifecyclesTest.java: Added unit test verifying custom lifecycle default-phases bindings to standard phases are preserved
  • Integration test: Added MavenITmng11796DefaultPhasesStandardLifecycleTest with reproducer plugin and consumer project

Test plan

  • All 544 maven-core unit tests pass
  • All 28 lifecycle-related tests pass (including 1 new)
  • Existing MNG-8299 custom lifecycle behavior is unaffected
  • CI passes
  • Integration test verifies touch goal executes at process-sources phase via mvn compile

Claude Code on behalf of Guillaume Nodet

…hases

When a custom lifecycle registered via components.xml maps plugin goals
to standard lifecycle phases (e.g., process-sources) via <default-phases>,
the LifecycleWrapperProvider now includes those entries as additional
phases in the wrapped API Lifecycle. The v3phases() method is overridden
to return only the custom lifecycle's own phases, ensuring computePhases()
is unaffected while getDefaultPhases() correctly picks up the bindings.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@gnodet gnodet added this to the 4.0.0-rc-6 milestone Apr 3, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Maven 4 ignores <default-phases> from components.xml for standard lifecycle phases

1 participant