From 367b78f24f305899e9eb2f2ee102a3670588c3fa Mon Sep 17 00:00:00 2001 From: Alexey Loubyansky Date: Wed, 26 Jun 2024 10:47:57 +0200 Subject: [PATCH] Properly enforce external BOM constraints in ProjectDependencyResolver --- .../domino/ProjectDependencyResolver.java | 54 ++++++++++++++++--- 1 file changed, 47 insertions(+), 7 deletions(-) diff --git a/domino/api/src/main/java/io/quarkus/domino/ProjectDependencyResolver.java b/domino/api/src/main/java/io/quarkus/domino/ProjectDependencyResolver.java index d4c1f077..ac8d4a1b 100644 --- a/domino/api/src/main/java/io/quarkus/domino/ProjectDependencyResolver.java +++ b/domino/api/src/main/java/io/quarkus/domino/ProjectDependencyResolver.java @@ -57,6 +57,7 @@ import org.eclipse.aether.artifact.DefaultArtifact; import org.eclipse.aether.graph.Dependency; import org.eclipse.aether.graph.DependencyNode; +import org.eclipse.aether.graph.Exclusion; import org.eclipse.aether.repository.RemoteRepository; import org.eclipse.aether.resolution.ArtifactDescriptorResult; import org.eclipse.aether.util.graph.manager.DependencyManagerUtils; @@ -784,15 +785,20 @@ private DependencyNode collectDependencies(ArtifactCoords coords, List(managedDeps.size()); - constraints.addAll(managedDeps); for (var d : descr.getManagedDependencies()) { var art = d.getArtifact(); - if (!map.containsKey( - ArtifactKey.of(art.getGroupId(), art.getArtifactId(), art.getClassifier(), art.getExtension()))) { - constraints.add(d); + var artKey = ArtifactKey.of(art.getGroupId(), art.getArtifactId(), art.getClassifier(), art.getExtension()); + var constraint = map.get(artKey); + if (constraint == null) { + map.put(artKey, d); + } else { + var merged = merge(constraint, d); + if (merged != d) { + map.put(artKey, merged); + } } } + constraints = new ArrayList<>(map.values()); } final List directDeps = new ArrayList<>(descr.getDependencies().size()); for (var d : descr.getDependencies()) { @@ -803,11 +809,16 @@ private DependencyNode collectDependencies(ArtifactCoords coords, List mergeExclusions(Dependency dominant, Dependency recessive) { + var merged = new ArrayList(dominant.getExclusions().size() + recessive.getExclusions().size()); + merged.addAll(dominant.getExclusions()); + merged.addAll(recessive.getExclusions()); + return merged; + } + private boolean isCollectNonManagedVisited() { return config.isLogSummary() && config.isIncludeNonManaged() || config.isLogNonManagedVisitied(); }