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 048444dd8fd..c837fd87214 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; /** @@ -35,6 +38,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 6ab2c1b3391..94d4ee6c8c0 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 @@ -132,7 +132,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 { @@ -140,7 +141,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; @@ -229,9 +231,11 @@ private DependencyResult resolveInternal( depRequest.setRoot(node); return 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); } } } 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 28d36721439..54c1762da94 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 @@ -160,7 +160,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); @@ -190,7 +192,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 794986b4b6c..278e06ed19c 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,18 +18,52 @@ */ package org.apache.maven.project; +import java.util.List; + +import org.eclipse.aether.graph.Dependency; + /** */ 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 64c616b4056..c8fce473c39 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 @@ -226,9 +226,7 @@ private List resolveExtension( .filter(ArtifactResult::isResolved) .map(ArtifactResult::getArtifact) .collect(Collectors.toList()); - } catch (PluginResolutionException e) { - throw new ExtensionResolutionException(extension, e.getCause()); - } catch (InterpolationException e) { + } catch (PluginResolutionException | InterpolationException e) { throw new ExtensionResolutionException(extension, e); } }