From da7d46646bbd3c7d719c3cf631f0562eff9077ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=AB=98=E6=98=A5=E6=99=96?= <18220699480@163.com> Date: Wed, 31 Dec 2025 15:26:17 +0800 Subject: [PATCH] Improve error message for unresolved expressions MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 高春晖 <18220699480@163.com> --- .../maven/impl/DefaultDependencyResolver.java | 58 ++++++++++++++++++- 1 file changed, 57 insertions(+), 1 deletion(-) diff --git a/impl/maven-impl/src/main/java/org/apache/maven/impl/DefaultDependencyResolver.java b/impl/maven-impl/src/main/java/org/apache/maven/impl/DefaultDependencyResolver.java index 4e955f090110..28d5806834b5 100644 --- a/impl/maven-impl/src/main/java/org/apache/maven/impl/DefaultDependencyResolver.java +++ b/impl/maven-impl/src/main/java/org/apache/maven/impl/DefaultDependencyResolver.java @@ -174,7 +174,8 @@ public DependencyResolverResult collect(@Nonnull DependencyResolverRequest reque session.getNode(result.getRoot(), request.getVerbose()), 0); } catch (DependencyCollectionException e) { - throw new DependencyResolverException("Unable to collect dependencies", e); + String enhancedMessage = enhanceCollectionError(e, collectRequest); + throw new DependencyResolverException(enhancedMessage, e); } } finally { RequestTraceHelper.exit(trace); @@ -274,4 +275,59 @@ public DependencyResolverResult resolve(DependencyResolverRequest request) private static DependencyResolverException cannotReadModuleInfo(final Path path, final IOException cause) { return new DependencyResolverException("Cannot read module information of " + path, cause); } + + private static boolean containsUnresolvedExpression(String value) { + return value != null && value.contains("${") && value.contains("}"); + } + + private static String enhanceCollectionError(DependencyCollectionException e, CollectRequest request) { + if (e.getMessage() != null && e.getMessage().contains("Invalid Collect Request")) { + StringBuilder enhanced = new StringBuilder(); + enhanced.append("Failed to collect dependencies"); + + org.eclipse.aether.graph.Dependency root = request.getRoot(); + if (root != null && root.getArtifact() != null) { + org.eclipse.aether.artifact.Artifact artifact = root.getArtifact(); + String groupId = artifact.getGroupId(); + String artifactId = artifact.getArtifactId(); + String version = artifact.getVersion(); + + if (containsUnresolvedExpression(groupId) || containsUnresolvedExpression(artifactId) + || containsUnresolvedExpression(version)) { + enhanced.append(" due to unresolved expression(s) in dependency: ") + .append(groupId) + .append(":") + .append(artifactId) + .append(":") + .append(version) + .append(".\n") + .append("Please check that all properties are defined in your POM or settings.xml."); + return enhanced.toString(); + } + } + + for (org.eclipse.aether.graph.Dependency dep : request.getDependencies()) { + if (dep != null && dep.getArtifact() != null) { + org.eclipse.aether.artifact.Artifact artifact = dep.getArtifact(); + String groupId = artifact.getGroupId(); + String artifactId = artifact.getArtifactId(); + String version = artifact.getVersion(); + + if (containsUnresolvedExpression(groupId) || containsUnresolvedExpression(artifactId) + || containsUnresolvedExpression(version)) { + enhanced.append(" due to unresolved expression(s) in dependency: ") + .append(groupId) + .append(":") + .append(artifactId) + .append(":") + .append(version) + .append(".\n") + .append("Please check that all properties are defined in your POM or settings.xml."); + return enhanced.toString(); + } + } + } + } + return e.getMessage(); + } }