Skip to content

Commit f662cf7

Browse files
gnodetclaude
andcommitted
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>
1 parent 5868027 commit f662cf7

1 file changed

Lines changed: 28 additions & 0 deletions

File tree

impl/maven-impl/src/main/java/org/apache/maven/impl/resolver/DefaultArtifactDescriptorReader.java

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,7 @@ public ArtifactDescriptorResult readArtifactDescriptor(
113113
}
114114

115115
delegate.populateResult(InternalSession.from(session), result, model);
116+
filterUninterpolatedDependencies(result);
116117
}
117118

118119
return result;
@@ -331,4 +332,31 @@ private int getPolicy(RepositorySystemSession session, Artifact a, ArtifactDescr
331332
}
332333
return policy.getPolicy(session, new ArtifactDescriptorPolicyRequest(a, request.getRequestContext()));
333334
}
335+
336+
private void filterUninterpolatedDependencies(ArtifactDescriptorResult result) {
337+
result.getDependencies().removeIf(dep -> {
338+
if (hasUninterpolatedExpression(dep.getArtifact())) {
339+
logger.debug("Filtered dependency with uninterpolated expression: {}", dep);
340+
return true;
341+
}
342+
return false;
343+
});
344+
result.getManagedDependencies().removeIf(dep -> {
345+
if (hasUninterpolatedExpression(dep.getArtifact())) {
346+
logger.debug("Filtered managed dependency with uninterpolated expression: {}", dep);
347+
return true;
348+
}
349+
return false;
350+
});
351+
}
352+
353+
private static boolean hasUninterpolatedExpression(Artifact artifact) {
354+
return containsPlaceholder(artifact.getGroupId())
355+
|| containsPlaceholder(artifact.getArtifactId())
356+
|| containsPlaceholder(artifact.getVersion());
357+
}
358+
359+
private static boolean containsPlaceholder(String value) {
360+
return value != null && value.contains("${");
361+
}
334362
}

0 commit comments

Comments
 (0)