You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by sl...@apache.org on 2026/08/08 21:19:18 UTC

(maven-dependency-plugin) branch master updated: [MDEP-425] List plugin repositories

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

slachiewicz pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/maven-dependency-plugin.git


The following commit(s) were added to refs/heads/master by this push:
     new 919074c6 [MDEP-425] List plugin repositories
919074c6 is described below

commit 919074c6f490d8617a00fb5d1886f3c86a1e9466
Author: Vaclav Haisman <vh...@gmail.com>
AuthorDate: Sun Aug 2 20:24:27 2026 +0200

    [MDEP-425] List plugin repositories
    
    Show effective plugin repositories in a separate, mirror-aware section of the list-repositories output. Extend the existing integration test to cover the new section.
    
    Fixes #868.
---
 src/it/projects/list-repositories/pom.xml          |  9 ++++-
 src/it/projects/list-repositories/verify.groovy    |  2 ++
 .../plugins/dependency/ListRepositoriesMojo.java   | 39 +++++++++++++---------
 3 files changed, 33 insertions(+), 17 deletions(-)

diff --git a/src/it/projects/list-repositories/pom.xml b/src/it/projects/list-repositories/pom.xml
index d74bc248..10847069 100644
--- a/src/it/projects/list-repositories/pom.xml
+++ b/src/it/projects/list-repositories/pom.xml
@@ -43,6 +43,13 @@
     </repository>
   </repositories>
 
+  <pluginRepositories>
+    <pluginRepository>
+      <id>fake-plugin-repository</id>
+      <url>http://localhost:3456</url>
+    </pluginRepository>
+  </pluginRepositories>
+
   <dependencies>
     <dependency>
       <groupId>org.apache.maven</groupId>
@@ -51,4 +58,4 @@
     </dependency>
   </dependencies>
 
-</project>
\ No newline at end of file
+</project>
diff --git a/src/it/projects/list-repositories/verify.groovy b/src/it/projects/list-repositories/verify.groovy
index bd311cf9..dde475eb 100644
--- a/src/it/projects/list-repositories/verify.groovy
+++ b/src/it/projects/list-repositories/verify.groovy
@@ -23,6 +23,8 @@ assert file.exists()
 String buildLog = file.getText( "UTF-8" )
 assert buildLog.contains( 'Project remote repositories used by this build:')
 assert buildLog.contains( '* fake-remote-repository (http://localhost:2345, default, releases+snapshots)')
+assert buildLog.contains( 'Plugin repositories used by this build:' )
+assert buildLog.contains( '* fake-plugin-repository (http://localhost:3456, default, releases+snapshots)' )
 assert buildLog.contains( '* sonatype-nexus-snapshots (https://oss.sonatype.org/content/repositories/snapshots, default, snapshots) mirrored by mrm-maven-plugin')
 if (!mavenVersion.startsWith('4.')) {
     // Maven 4 drop central repo from default super pom - so model doesn't have it
diff --git a/src/main/java/org/apache/maven/plugins/dependency/ListRepositoriesMojo.java b/src/main/java/org/apache/maven/plugins/dependency/ListRepositoriesMojo.java
index 01b9cc21..82f2fb5a 100644
--- a/src/main/java/org/apache/maven/plugins/dependency/ListRepositoriesMojo.java
+++ b/src/main/java/org/apache/maven/plugins/dependency/ListRepositoriesMojo.java
@@ -48,8 +48,8 @@ import org.eclipse.aether.util.graph.visitor.TreeDependencyVisitor;
 import org.sonatype.plexus.build.incremental.BuildContext;
 
 /**
- * Goal that collects all project dependencies and then lists the repositories used by the build and by the transitive
- * dependencies.
+ * Goal that collects all project dependencies and then lists the dependency repositories used by the build and
+ * transitive dependencies, along with the plugin repositories used by the build.
  *
  * @author <a href="mailto:brianf@apache.org">Brian Fox</a>
  * @since 2.2
@@ -109,21 +109,18 @@ public class ListRepositoriesMojo extends AbstractDependencyMojo {
                 }
             }));
 
-            if (repositories.isEmpty()) {
+            Set<RemoteRepository> pluginRepositories =
+                    new HashSet<>(Optional.ofNullable(getProject().getRemotePluginRepositories())
+                            .orElseGet(Collections::emptyList));
+
+            if (repositories.isEmpty() && pluginRepositories.isEmpty()) {
                 getLog().info("No remote repository is used by this build." + System.lineSeparator());
                 return;
             }
 
             StringBuilder message = new StringBuilder();
-
-            Map<Boolean, List<RemoteRepository>> repoGroupByMirrors = repositories.stream()
-                    .collect(Collectors.groupingBy(
-                            repo -> repo.getMirroredRepositories().isEmpty()));
-
-            prepareRemoteRepositoriesList(
-                    message, repoGroupByMirrors.getOrDefault(Boolean.TRUE, Collections.emptyList()));
-            prepareRemoteMirrorRepositoriesList(
-                    message, repoGroupByMirrors.getOrDefault(Boolean.FALSE, Collections.emptyList()));
+            prepareRemoteRepositoriesList(message, "Project remote repositories used by this build:", repositories);
+            prepareRemoteRepositoriesList(message, "Plugin repositories used by this build:", pluginRepositories);
 
             getLog().info(message);
 
@@ -163,11 +160,21 @@ public class ListRepositoriesMojo extends AbstractDependencyMojo {
     }
 
     private void prepareRemoteRepositoriesList(
-            StringBuilder message, Collection<RemoteRepository> remoteProjectRepositories) {
+            StringBuilder message, String heading, Collection<RemoteRepository> repositories) {
+        if (repositories.isEmpty()) {
+            return;
+        }
 
-        message.append("Project remote repositories used by this build:").append(System.lineSeparator());
+        message.append(heading).append(System.lineSeparator());
 
-        remoteProjectRepositories.forEach(
-                repo -> message.append(" * ").append(repo).append(System.lineSeparator()));
+        Map<Boolean, List<RemoteRepository>> repoGroupByMirrors = repositories.stream()
+                .collect(Collectors.groupingBy(
+                        repo -> repo.getMirroredRepositories().isEmpty()));
+
+        repoGroupByMirrors
+                .getOrDefault(Boolean.TRUE, Collections.emptyList())
+                .forEach(repo -> message.append(" * ").append(repo).append(System.lineSeparator()));
+        prepareRemoteMirrorRepositoriesList(
+                message, repoGroupByMirrors.getOrDefault(Boolean.FALSE, Collections.emptyList()));
     }
 }