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

sjaranowski pushed a commit to branch maven-3.9.x
in repository https://gitbox.apache.org/repos/asf/maven.git


The following commit(s) were added to refs/heads/maven-3.9.x by this push:
     new 37f1f02a34 [MNG-7758] Report dependency problems for all repository
37f1f02a34 is described below

commit 37f1f02a34bde9edbb874021b5659978300ceea2
Author: Slawomir Jaranowski <[email protected]>
AuthorDate: Wed Jun 12 09:49:10 2024 +0200

    [MNG-7758] Report dependency problems for all repository
    
    (cherry picked from commit 768ebbc26306a1f6a4745e0d73a87c75aa5fb7a0)
---
 .../maven/plugin/PluginResolutionException.java    | 15 ++++++++++
 .../DefaultPluginDependenciesResolver.java         | 12 +++++---
 .../DefaultProjectDependenciesResolver.java        |  8 +++--
 .../project/DependencyResolutionException.java     | 34 ++++++++++++++++++++++
 .../internal/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 8c0f69c8bc..a63644c51c 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 class PluginResolutionException extends Exception {
         this.plugin = plugin;
     }
 
+    public PluginResolutionException(Plugin plugin, List<Exception> 
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 27b3e81ea1..5d4e37fb72 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 class DefaultPluginDependenciesResolver implements 
PluginDependenciesReso
                 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 class DefaultPluginDependenciesResolver implements 
PluginDependenciesReso
             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 @@ public class DefaultPluginDependenciesResolver implements 
PluginDependenciesReso
             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 71eddb1e46..dc4f3f1735 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 class DefaultProjectDependenciesResolver implements 
ProjectDependenciesRe
             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 class DefaultProjectDependenciesResolver implements 
ProjectDependenciesRe
             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 c4e17ea945..c4c5ca5e28 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<Exception> 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 c63558ea13..bb903db6c1 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 @@ public class BootstrapCoreExtensionManager {
             List<Artifact> 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);
         }
     }

Reply via email to