From 37f1f02a34bde9edbb874021b5659978300ceea2 Mon Sep 17 00:00:00 2001 From: Slawomir Jaranowski Date: Wed, 12 Jun 2024 09:49:10 +0200 Subject: [PATCH] [MNG-7758] Report dependency problems for all repository (cherry picked from commit 768ebbc26306a1f6a4745e0d73a87c75aa5fb7a0) --- .../plugin/PluginResolutionException.java | 15 ++++++++ .../DefaultPluginDependenciesResolver.java | 12 ++++--- .../DefaultProjectDependenciesResolver.java | 8 +++-- .../DependencyResolutionException.java | 34 +++++++++++++++++++ .../BootstrapCoreExtensionManager.java | 4 +-- 5 files changed, 64 insertions(+), 9 deletions(-) diff --git a/maven-core/src/main/java/org/apache/maven/plugin/PluginResolutionException.java b/maven-core/src/main/java/org/apache/maven/plugin/PluginResolutionException.java index 8c0f69c8bc06..a63644c51c32 100644 --- a/maven-core/src/main/java/org/apache/maven/plugin/PluginResolutionException.java +++ b/maven-core/src/main/java/org/apache/maven/plugin/PluginResolutionException.java @@ -18,6 +18,9 @@ */ package org.apache.maven.plugin; +import java.util.List; +import java.util.stream.Collectors; + import org.apache.maven.model.Plugin; /** @@ -36,6 +39,18 @@ public PluginResolutionException(Plugin plugin, Throwable cause) { this.plugin = plugin; } + public PluginResolutionException(Plugin plugin, List exceptions, Throwable cause) { + super( + "Plugin " + plugin.getId() + " or one of its dependencies could not be resolved:" + + System.lineSeparator() + "\t" + + exceptions.stream() + .map(Throwable::getMessage) + .collect(Collectors.joining(System.lineSeparator() + "\t")) + + System.lineSeparator(), + cause); + this.plugin = plugin; + } + public Plugin getPlugin() { return plugin; } diff --git a/maven-core/src/main/java/org/apache/maven/plugin/internal/DefaultPluginDependenciesResolver.java b/maven-core/src/main/java/org/apache/maven/plugin/internal/DefaultPluginDependenciesResolver.java index 27b3e81ea1e2..5d4e37fb7234 100644 --- a/maven-core/src/main/java/org/apache/maven/plugin/internal/DefaultPluginDependenciesResolver.java +++ b/maven-core/src/main/java/org/apache/maven/plugin/internal/DefaultPluginDependenciesResolver.java @@ -129,7 +129,8 @@ public Artifact resolve(Plugin plugin, List repositories, Repo pluginArtifact = pluginArtifact.setProperties(props); } } catch (ArtifactDescriptorException e) { - throw new PluginResolutionException(plugin, e); + throw new PluginResolutionException( + plugin, e.getResult().getExceptions(), logger.isDebugEnabled() ? e : null); } try { @@ -137,7 +138,8 @@ public Artifact resolve(Plugin plugin, List repositories, Repo request.setTrace(trace); pluginArtifact = repoSystem.resolveArtifact(session, request).getArtifact(); } catch (ArtifactResolutionException e) { - throw new PluginResolutionException(plugin, e); + throw new PluginResolutionException( + plugin, e.getResult().getExceptions(), logger.isDebugEnabled() ? e : null); } return pluginArtifact; @@ -218,9 +220,11 @@ private DependencyNode resolveInternal( depRequest.setRoot(node); repoSystem.resolveDependencies(session, depRequest); } catch (DependencyCollectionException e) { - throw new PluginResolutionException(plugin, e); + throw new PluginResolutionException( + plugin, e.getResult().getExceptions(), logger.isDebugEnabled() ? e : null); } catch (DependencyResolutionException e) { - throw new PluginResolutionException(plugin, e.getCause()); + throw new PluginResolutionException( + plugin, e.getResult().getCollectExceptions(), logger.isDebugEnabled() ? e : null); } return node; diff --git a/maven-core/src/main/java/org/apache/maven/project/DefaultProjectDependenciesResolver.java b/maven-core/src/main/java/org/apache/maven/project/DefaultProjectDependenciesResolver.java index 71eddb1e46e0..dc4f3f173519 100644 --- a/maven-core/src/main/java/org/apache/maven/project/DefaultProjectDependenciesResolver.java +++ b/maven-core/src/main/java/org/apache/maven/project/DefaultProjectDependenciesResolver.java @@ -155,7 +155,9 @@ public DependencyResolutionResult resolve(DependencyResolutionRequest request) result.setCollectionErrors(e.getResult().getExceptions()); throw new DependencyResolutionException( - result, "Could not resolve dependencies for project " + project.getId() + ": " + e.getMessage(), e); + result, + "Could not collect dependencies for project " + project.getId(), + logger.isDebugEnabled() ? e : null); } depRequest.setRoot(node); @@ -184,7 +186,9 @@ public DependencyResolutionResult resolve(DependencyResolutionRequest request) process(result, e.getResult().getArtifactResults()); throw new DependencyResolutionException( - result, "Could not resolve dependencies for project " + project.getId() + ": " + e.getMessage(), e); + result, + "Could not resolve dependencies for project " + project.getId(), + logger.isDebugEnabled() ? e : null); } return result; diff --git a/maven-core/src/main/java/org/apache/maven/project/DependencyResolutionException.java b/maven-core/src/main/java/org/apache/maven/project/DependencyResolutionException.java index c4e17ea945b7..c4c5ca5e2833 100644 --- a/maven-core/src/main/java/org/apache/maven/project/DependencyResolutionException.java +++ b/maven-core/src/main/java/org/apache/maven/project/DependencyResolutionException.java @@ -18,19 +18,53 @@ */ package org.apache.maven.project; +import java.util.List; + +import org.eclipse.aether.graph.Dependency; + /** * @author Benjamin Bentmann */ public class DependencyResolutionException extends Exception { private final transient DependencyResolutionResult result; + private final transient String detailMessage; public DependencyResolutionException(DependencyResolutionResult result, String message, Throwable cause) { super(message, cause); this.result = result; + this.detailMessage = prepareDetailMessage(message, result); + } + + private static String prepareDetailMessage(String message, DependencyResolutionResult result) { + StringBuilder msg = new StringBuilder(message); + msg.append(System.lineSeparator()); + for (Dependency dependency : result.getUnresolvedDependencies()) { + msg.append("dependency: ").append(dependency).append(System.lineSeparator()); + List exceptions = result.getResolutionErrors(dependency); + for (Exception e : exceptions) { + msg.append("\t").append(e.getMessage()).append(System.lineSeparator()); + } + } + + for (Exception exception : result.getCollectionErrors()) { + msg.append(exception.getMessage()).append(System.lineSeparator()); + if (exception.getCause() != null) { + msg.append("\tCaused by: ") + .append(exception.getCause().getMessage()) + .append(System.lineSeparator()); + } + } + + return msg.toString(); } public DependencyResolutionResult getResult() { return result; } + + @Override + public String getMessage() { + return detailMessage; + } } diff --git a/maven-embedder/src/main/java/org/apache/maven/cli/internal/BootstrapCoreExtensionManager.java b/maven-embedder/src/main/java/org/apache/maven/cli/internal/BootstrapCoreExtensionManager.java index c63558ea13a9..bb903db6c18c 100644 --- a/maven-embedder/src/main/java/org/apache/maven/cli/internal/BootstrapCoreExtensionManager.java +++ b/maven-embedder/src/main/java/org/apache/maven/cli/internal/BootstrapCoreExtensionManager.java @@ -178,9 +178,7 @@ private List resolveExtension( List artifacts = nlg.getArtifacts(false); return artifacts; - } catch (PluginResolutionException e) { - throw new ExtensionResolutionException(extension, e.getCause()); - } catch (InterpolationException e) { + } catch (PluginResolutionException | InterpolationException e) { throw new ExtensionResolutionException(extension, e); } }