You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by gn...@apache.org on 2026/05/19 10:03:49 UTC

(maven) branch backport-12088-to-4.0.x created (now 41016d48cc)

This is an automated email from the ASF dual-hosted git repository.

gnodet pushed a change to branch backport-12088-to-4.0.x
in repository https://gitbox.apache.org/repos/asf/maven.git


      at 41016d48cc Fix #12086: filter transitive repos with uninterpolated expressions

This branch includes the following new commits:

     new a56dfd9997 Filter transitive dependencies with uninterpolated expressions
     new 41016d48cc Fix #12086: filter transitive repos with uninterpolated expressions

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



(maven) 02/02: Fix #12086: filter transitive repos with uninterpolated expressions

Posted by gn...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

gnodet pushed a commit to branch backport-12088-to-4.0.x
in repository https://gitbox.apache.org/repos/asf/maven.git

commit 41016d48cc922dce3793a36637f30d2d2416af08
Author: Guillaume Nodet <gn...@gmail.com>
AuthorDate: Mon May 18 23:51:28 2026 +0200

    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 <no...@anthropic.com>
---
 .../maven/impl/resolver/DefaultArtifactDescriptorReader.java       | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/impl/maven-impl/src/main/java/org/apache/maven/impl/resolver/DefaultArtifactDescriptorReader.java b/impl/maven-impl/src/main/java/org/apache/maven/impl/resolver/DefaultArtifactDescriptorReader.java
index fece86dc64..88d168cccf 100644
--- a/impl/maven-impl/src/main/java/org/apache/maven/impl/resolver/DefaultArtifactDescriptorReader.java
+++ b/impl/maven-impl/src/main/java/org/apache/maven/impl/resolver/DefaultArtifactDescriptorReader.java
@@ -334,6 +334,13 @@ private int getPolicy(RepositorySystemSession session, Artifact a, ArtifactDescr
     }
 
     private void filterUninterpolatedDependencies(ArtifactDescriptorResult result) {
+        result.getRepositories().removeIf(repo -> {
+            if (containsPlaceholder(repo.getId()) || containsPlaceholder(repo.getUrl())) {
+                logger.debug("Filtered repository with uninterpolated expression: {}", repo);
+                return true;
+            }
+            return false;
+        });
         result.getDependencies().removeIf(dep -> {
             if (hasUninterpolatedExpression(dep.getArtifact())) {
                 logger.debug("Filtered dependency with uninterpolated expression: {}", dep);


(maven) 01/02: Filter transitive dependencies with uninterpolated expressions

Posted by gn...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

gnodet pushed a commit to branch backport-12088-to-4.0.x
in repository https://gitbox.apache.org/repos/asf/maven.git

commit a56dfd999751b517548f38445cf9e0aa2c13ebf8
Author: Guillaume Nodet <gn...@gmail.com>
AuthorDate: Mon May 18 22:11:02 2026 +0200

    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 9332ad3d55).
    
    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 <no...@anthropic.com>
---
 .../resolver/DefaultArtifactDescriptorReader.java  | 28 ++++++++++++++++++++++
 1 file changed, 28 insertions(+)

diff --git a/impl/maven-impl/src/main/java/org/apache/maven/impl/resolver/DefaultArtifactDescriptorReader.java b/impl/maven-impl/src/main/java/org/apache/maven/impl/resolver/DefaultArtifactDescriptorReader.java
index 0b2badca84..fece86dc64 100644
--- a/impl/maven-impl/src/main/java/org/apache/maven/impl/resolver/DefaultArtifactDescriptorReader.java
+++ b/impl/maven-impl/src/main/java/org/apache/maven/impl/resolver/DefaultArtifactDescriptorReader.java
@@ -113,6 +113,7 @@ public ArtifactDescriptorResult readArtifactDescriptor(
             }
 
             delegate.populateResult(InternalSession.from(session), result, model);
+            filterUninterpolatedDependencies(result);
         }
 
         return result;
@@ -331,4 +332,31 @@ private int getPolicy(RepositorySystemSession session, Artifact a, ArtifactDescr
         }
         return policy.getPolicy(session, new ArtifactDescriptorPolicyRequest(a, request.getRequestContext()));
     }
+
+    private void filterUninterpolatedDependencies(ArtifactDescriptorResult result) {
+        result.getDependencies().removeIf(dep -> {
+            if (hasUninterpolatedExpression(dep.getArtifact())) {
+                logger.debug("Filtered dependency with uninterpolated expression: {}", dep);
+                return true;
+            }
+            return false;
+        });
+        result.getManagedDependencies().removeIf(dep -> {
+            if (hasUninterpolatedExpression(dep.getArtifact())) {
+                logger.debug("Filtered managed dependency with uninterpolated expression: {}", dep);
+                return true;
+            }
+            return false;
+        });
+    }
+
+    private static boolean hasUninterpolatedExpression(Artifact artifact) {
+        return containsPlaceholder(artifact.getGroupId())
+                || containsPlaceholder(artifact.getArtifactId())
+                || containsPlaceholder(artifact.getVersion());
+    }
+
+    private static boolean containsPlaceholder(String value) {
+        return value != null && value.contains("${");
+    }
 }