diff --git a/core-it-suite/src/test/resources/bootstrap/pom.xml b/core-it-suite/src/test/resources/bootstrap/pom.xml
index a6b746515..85eaad1b1 100644
--- a/core-it-suite/src/test/resources/bootstrap/pom.xml
+++ b/core-it-suite/src/test/resources/bootstrap/pom.xml
@@ -51,6 +51,7 @@ under the License.
2.1-SNAPSHOT
+ dependencies
download
@@ -59,6 +60,19 @@ under the License.
${file}
+
+ metadata
+
+ download
+
+ process-resources
+ false
+
+
+ org.apache.maven.plugins
+
+
+
diff --git a/core-it-support/maven-it-plugin-bootstrap/src/main/java/org/apache/maven/its/bootstrap/DownloadMojo.java b/core-it-support/maven-it-plugin-bootstrap/src/main/java/org/apache/maven/its/bootstrap/DownloadMojo.java
index 241a68057..18af78619 100644
--- a/core-it-support/maven-it-plugin-bootstrap/src/main/java/org/apache/maven/its/bootstrap/DownloadMojo.java
+++ b/core-it-support/maven-it-plugin-bootstrap/src/main/java/org/apache/maven/its/bootstrap/DownloadMojo.java
@@ -22,6 +22,7 @@
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
+import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
@@ -37,11 +38,17 @@
import org.apache.maven.plugins.annotations.Parameter;
import org.apache.maven.project.MavenProject;
import org.apache.maven.project.ProjectBuildingRequest;
+import org.eclipse.aether.DefaultRepositorySystemSession;
import org.eclipse.aether.RepositorySystem;
import org.eclipse.aether.RepositorySystemSession;
import org.eclipse.aether.collection.CollectRequest;
+import org.eclipse.aether.metadata.DefaultMetadata;
+import org.eclipse.aether.metadata.Metadata;
import org.eclipse.aether.repository.RemoteRepository;
+import org.eclipse.aether.repository.RepositoryPolicy;
import org.eclipse.aether.resolution.DependencyRequest;
+import org.eclipse.aether.resolution.MetadataRequest;
+import org.eclipse.aether.resolution.MetadataResult;
/**
* Boostrap plugin to download all required dependencies (provided in file) or to collect lifecycle bound build plugin
@@ -68,6 +75,12 @@ public class DownloadMojo extends AbstractMojo {
@Parameter
private File file;
+ /**
+ * A list of groupIds to resolve metadata.
+ */
+ @Parameter
+ private List groupsToResolve;
+
@Component
private RepositorySystem repositorySystem;
@@ -76,6 +89,16 @@ public class DownloadMojo extends AbstractMojo {
@Override
public void execute() throws MojoFailureException {
+
+ ProjectBuildingRequest projectBuildingRequest = session.getProjectBuildingRequest();
+ RepositorySystemSession repositorySystemSession = projectBuildingRequest.getRepositorySession();
+ List repos = RepositoryUtils.toRepos(projectBuildingRequest.getRemoteRepositories());
+
+ if (groupsToResolve != null && !groupsToResolve.isEmpty()) {
+ resolveMetaData(groupsToResolve, repositorySystemSession, repos);
+ return;
+ }
+
// this or that: either resolver file listed artifacts or collect lifecycle packaging plugins
if (file != null && file.exists()) {
System.out.println("Collecting artifacts from file: " + file);
@@ -101,10 +124,6 @@ public void execute() throws MojoFailureException {
}
}
- ProjectBuildingRequest projectBuildingRequest = session.getProjectBuildingRequest();
- RepositorySystemSession repositorySystemSession = projectBuildingRequest.getRepositorySession();
- List repos = RepositoryUtils.toRepos(projectBuildingRequest.getRemoteRepositories());
-
for (Dependency dependency : dependencies) {
try {
org.eclipse.aether.graph.Dependency root =
@@ -138,4 +157,34 @@ static Dependency toDependency(String artifact) throws MojoFailureException {
}
return coordinate;
}
+
+ /**
+ * Resolve metadata for maven plugins needs for MavenITmng7353CliGoalInvocationTest.
+ */
+ private void resolveMetaData(
+ List groupsToResolve,
+ RepositorySystemSession repositorySystemSession,
+ List repos) {
+
+ getLog().info("Resolving metadata for groups: " + groupsToResolve);
+
+ List requests = new ArrayList<>();
+
+ for (String groupId : groupsToResolve) {
+ Metadata metadata =
+ new DefaultMetadata(groupId, "maven-metadata.xml", DefaultMetadata.Nature.RELEASE_OR_SNAPSHOT);
+ for (RemoteRepository repository : repos) {
+ requests.add(new MetadataRequest(metadata, repository, "plugin"));
+ }
+ }
+
+ DefaultRepositorySystemSession session = new DefaultRepositorySystemSession(repositorySystemSession);
+ session.setUpdatePolicy(RepositoryPolicy.UPDATE_POLICY_ALWAYS);
+
+ List metadataResults = repositorySystem.resolveMetadata(session, requests);
+ for (MetadataResult metadataResult : metadataResults) {
+ getLog().info("metadata result: " + metadataResult.toString() + " from repository: "
+ + metadataResult.getRequest().getRepository());
+ }
+ }
}