Skip to content

Filter transitive dependencies with uninterpolated expressions#12084

Merged
gnodet merged 1 commit into
masterfrom
filter-transitive-uninterpolated-deps
May 20, 2026
Merged

Filter transitive dependencies with uninterpolated expressions#12084
gnodet merged 1 commit into
masterfrom
filter-transitive-uninterpolated-deps

Conversation

@gnodet
Copy link
Copy Markdown
Contributor

@gnodet gnodet commented May 18, 2026

Summary

  • Filter out transitive dependencies and managed dependencies with uninterpolated ${...} expressions in DefaultArtifactDescriptorReader.populateResult() before they reach the resolver/validator
  • Follows the same pattern used for transitive repositories with uninterpolated IDs/URLs (commit 9332ad3, PR Filter transitive repositories with uninterpolated IDs #12050)
  • Fixes builds that fail with IllegalArgumentException: Not fully interpolated dependency when a transitive POM contains dependencies with undefined property expressions (e.g., org.osgi:osgi.core:jar:${osgi.version})

Context

Maven 4's MavenValidator.validateDependency() rejects dependencies with uninterpolated property expressions. This is correct for the project's own POMs (caught during model validation), but transitive dependency POMs from Maven Central may contain managed dependencies with expressions that are not resolvable outside their original build context. These should be silently filtered rather than causing a build failure.

This is the resolver-side complement to #12083 (mvnup fix for project-local POMs with undefined property expressions).

Test plan

  • mvn test -B -pl impl/maven-impl — 462 tests pass
  • mvn test -B -pl compat/maven-resolver-provider — 27 tests pass
  • Verify with causeway-app-simpleapp (transitive org.osgi:osgi.core:jar:${osgi.version})

🤖 Generated with Claude Code

When a transitive dependency POM contains dependencies with
uninterpolated property expressions (e.g., ${osgi.version}), the
MavenValidator.validateDependency() throws IllegalArgumentException
during dependency collection.

Filter out such dependencies in DefaultArtifactDescriptorReader
.populateResult() before they reach the resolver/validator, following
the same pattern used for transitive repositories with uninterpolated
IDs/URLs (commit 9332ad3).

This is safe because invalid dependencies from build POMs have already
been rejected during model validation. Uninterpolated expressions in
transitive dependency POMs indicate undefined properties in those
third-party POMs that cannot be resolved.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
gnodet added a commit that referenced this pull request May 18, 2026
When a transitive dependency POM contains dependencies with
uninterpolated property expressions (e.g., ${osgi.version}), the
MavenValidator.validateDependency() throws IllegalArgumentException
during dependency collection.

Filter out such dependencies in DefaultArtifactDescriptorReader after
populateResult() runs, before they reach the resolver/validator,
following the same pattern used for transitive repositories with
uninterpolated IDs/URLs (commit 9332ad3).

This is safe because invalid dependencies from build POMs have already
been rejected during model validation. Uninterpolated expressions in
transitive dependency POMs indicate undefined properties in those
third-party POMs that cannot be resolved.

Cherry-pick of #12084, adapted for the 4.0.x delegate pattern.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
gnodet added a commit that referenced this pull request May 19, 2026
When a transitive dependency POM contains dependencies with
uninterpolated property expressions (e.g., ${osgi.version}), the
MavenValidator.validateDependency() throws IllegalArgumentException
during dependency collection.

Filter out such dependencies in DefaultArtifactDescriptorReader after
populateResult() runs, before they reach the resolver/validator,
following the same pattern used for transitive repositories with
uninterpolated IDs/URLs (commit 9332ad3).

This is safe because invalid dependencies from build POMs have already
been rejected during model validation. Uninterpolated expressions in
transitive dependency POMs indicate undefined properties in those
third-party POMs that cannot be resolved.

Cherry-pick of #12084, adapted for the 4.0.x delegate pattern.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
gnodet added a commit that referenced this pull request May 19, 2026
When a transitive dependency POM contains dependencies with
uninterpolated property expressions (e.g., ${osgi.version}), the
MavenValidator.validateDependency() throws IllegalArgumentException
during dependency collection.

Filter out such dependencies in DefaultArtifactDescriptorReader after
populateResult() runs, before they reach the resolver/validator,
following the same pattern used for transitive repositories with
uninterpolated IDs/URLs (commit 9332ad3).

This is safe because invalid dependencies from build POMs have already
been rejected during model validation. Uninterpolated expressions in
transitive dependency POMs indicate undefined properties in those
third-party POMs that cannot be resolved.

Cherry-pick of #12084, adapted for the 4.0.x delegate pattern.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
gnodet added a commit that referenced this pull request May 19, 2026
When a transitive dependency POM contains dependencies with
uninterpolated property expressions (e.g., ${osgi.version}), the
MavenValidator.validateDependency() throws IllegalArgumentException
during dependency collection.

Filter out such dependencies in DefaultArtifactDescriptorReader after
populateResult() runs, before they reach the resolver/validator,
following the same pattern used for transitive repositories with
uninterpolated IDs/URLs (commit 9332ad3).

This is safe because invalid dependencies from build POMs have already
been rejected during model validation. Uninterpolated expressions in
transitive dependency POMs indicate undefined properties in those
third-party POMs that cannot be resolved.

Cherry-pick of #12084, adapted for the 4.0.x delegate pattern.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@gnodet gnodet merged commit bb28b17 into master May 20, 2026
24 checks passed
@gnodet gnodet deleted the filter-transitive-uninterpolated-deps branch May 20, 2026 14:29
gnodet added a commit that referenced this pull request May 20, 2026
…essions (#12097)

* Filter transitive dependencies with uninterpolated expressions

When a transitive dependency POM contains dependencies with
uninterpolated property expressions (e.g., ${osgi.version}), the
MavenValidator.validateDependency() throws IllegalArgumentException
during dependency collection.

Filter out such dependencies in DefaultArtifactDescriptorReader after
populateResult() runs, before they reach the resolver/validator,
following the same pattern used for transitive repositories with
uninterpolated IDs/URLs (commit 9332ad3).

This is safe because invalid dependencies from build POMs have already
been rejected during model validation. Uninterpolated expressions in
transitive dependency POMs indicate undefined properties in those
third-party POMs that cannot be resolved.

Cherry-pick of #12084, adapted for the 4.0.x delegate pattern.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Fix #12086: filter transitive repos with uninterpolated expressions

Extend the uninterpolated expression filtering to also cover
repositories from transitive dependency POMs. This prevents
build failures when a transitive dependency defines a repository
with a property expression (e.g., ${eclipseP2RepoId}) as its ID
that is only available in the original project context.

Cherry-picked and adapted from PR #12088 for the 4.0.x branch.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
@github-actions github-actions Bot added this to the 4.1.0 milestone May 20, 2026
@github-actions
Copy link
Copy Markdown

@gnodet Please assign appropriate label to PR according to the type of change.

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.

2 participants