Skip to content

Filter transitive dependencies with uninterpolated expressions#12084

Open
gnodet wants to merge 1 commit into
masterfrom
filter-transitive-uninterpolated-deps
Open

Filter transitive dependencies with uninterpolated expressions#12084
gnodet wants to merge 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>
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.

1 participant