Skip to content

ReactorReader: prefer consumer POM from project-local repo when resolving POMs#11084

Closed
gnodet wants to merge 2 commits intomasterfrom
gh-reactorreader-prefer-consumer-pom
Closed

ReactorReader: prefer consumer POM from project-local repo when resolving POMs#11084
gnodet wants to merge 2 commits intomasterfrom
gh-reactorreader-prefer-consumer-pom

Conversation

@gnodet
Copy link
Contributor

@gnodet gnodet commented Sep 1, 2025

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 added a commit that referenced this pull request Sep 1, 2025
…l repo using consumer POM if present

New IT builds module 'a' first to populate project-local repo, then builds only 'b' which depends on 'a'. The antrun assertion ensures the consumer POM exists, and the behavior is verified by successful resolution.
@gnodet gnodet force-pushed the gh-reactorreader-prefer-consumer-pom branch from 77298cc to b451d75 Compare September 2, 2025 07:44
@gnodet gnodet added this to the 4.1.0 milestone Sep 2, 2025
@gnodet gnodet added bug Something isn't working backport labels Sep 2, 2025
…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 gnodet force-pushed the gh-reactorreader-prefer-consumer-pom branch from b451d75 to 576d21a Compare September 2, 2025 08:25
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 <parent />.

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 gh-11084
@gnodet gnodet closed this Sep 9, 2025
@gnodet gnodet deleted the gh-reactorreader-prefer-consumer-pom branch September 9, 2025 08:41
@github-actions github-actions bot removed this from the 4.1.0 milestone Sep 9, 2025
gnodet added a commit that referenced this pull request Sep 17, 2025
* ReactorReader: prefer consumer POM from project-local repo when resolving 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.

* Fix ReactorReader to prefer consumer POMs over build POMs

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 <parent />.

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 gh-11084

* Fix
gnodet added a commit to gnodet/maven that referenced this pull request Sep 17, 2025
* ReactorReader: prefer consumer POM from project-local repo when resolving 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.

* Fix ReactorReader to prefer consumer POMs over build POMs

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 <parent />.

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

* Fix

(cherry picked from commit 93b85b0)
gnodet added a commit that referenced this pull request Sep 17, 2025
…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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

backport bug Something isn't working

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant