Fix ReactorReader to prefer consumer POMs over build POMs by gnodet · Pull Request #11107 · apache/maven (original) (raw)

added 2 commits

September 2, 2025 10:25

@gnodet

…ving POMs

When only part of a reactor is built, ReactorReader mirrors artifacts into a project-local repo. If a module depends on another reactor module not in the current session, POM resolution may hit that repo. Today, the main POM path contains the build POM, which can include Maven-4 build-time constructs and be invalid as a repository POM (e.g., missing parent.*). As a result, dependency resolution can fail with fatal model errors.

Teach ReactorReader to prefer the consumer POM (classifier=consumer) for POM artifacts when present in the project-local repo, falling back to the main POM otherwise. This avoids consuming a build POM from the project-local repo without changing the repo contents or layout.

@gnodet

When building modules in isolation (outside of the full reactor), the ReactorReader should prefer consumer POMs from the project-local repository over build POMs to avoid invalid POM elements like .

The findModel method now:

  1. First checks if the project is in the current reactor session
  2. If not found, looks for a consumer POM in the project-local repository
  3. Uses the same consumer POM preference logic as findInProjectLocalRepository

This eliminates 'invalid POM' warnings when building modules in isolation while maintaining backward compatibility for reactor builds.

Fixes apachegh-11084

@gnodet

gnodet added a commit to gnodet/maven that referenced this pull request

Sep 17, 2025

@gnodet

When only part of a reactor is built, ReactorReader mirrors artifacts into a project-local repo. If a module depends on another reactor module not in the current session, POM resolution may hit that repo. Today, the main POM path contains the build POM, which can include Maven-4 build-time constructs and be invalid as a repository POM (e.g., missing parent.*). As a result, dependency resolution can fail with fatal model errors.

Teach ReactorReader to prefer the consumer POM (classifier=consumer) for POM artifacts when present in the project-local repo, falling back to the main POM otherwise. This avoids consuming a build POM from the project-local repo without changing the repo contents or layout.

When building modules in isolation (outside of the full reactor), the ReactorReader should prefer consumer POMs from the project-local repository over build POMs to avoid invalid POM elements like .

The findModel method now:

  1. First checks if the project is in the current reactor session
  2. If not found, looks for a consumer POM in the project-local repository
  3. Uses the same consumer POM preference logic as findInProjectLocalRepository

This eliminates 'invalid POM' warnings when building modules in isolation while maintaining backward compatibility for reactor builds.

Fixes apachegh-11084

(cherry picked from commit 93b85b0)

gnodet added a commit that referenced this pull request

Sep 17, 2025

@gnodet

…11131)

ReactorReader: prefer consumer POMs over build POMs for isolated module builds

When building modules in isolation (outside of the full reactor), ReactorReader now prefers consumer POMs from the project-local repository over build POMs. This prevents dependency resolution failures caused by build POMs containing Maven-4 build-time constructs that are invalid as repository POMs (e.g., missing parent elements).

The findModel method now:

  1. First checks if the project is in the current reactor session
  2. If not found, looks for a consumer POM in the project-local repository
  3. Uses the same consumer POM preference logic as findInProjectLocalRepository

This eliminates 'invalid POM' warnings when building modules in isolation while maintaining backward compatibility for reactor builds without changing repository contents or layout.

Fixes gh-11084

This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.Learn more about bidirectional Unicode characters

[ Show hidden characters]({{ revealButtonHref }})