2222import java .io .File ;
2323import java .io .FileReader ;
2424import java .io .IOException ;
25+ import java .util .ArrayList ;
2526import java .util .HashSet ;
2627import java .util .List ;
2728import java .util .Set ;
3738import org .apache .maven .plugins .annotations .Parameter ;
3839import org .apache .maven .project .MavenProject ;
3940import org .apache .maven .project .ProjectBuildingRequest ;
41+ import org .eclipse .aether .DefaultRepositorySystemSession ;
4042import org .eclipse .aether .RepositorySystem ;
4143import org .eclipse .aether .RepositorySystemSession ;
4244import org .eclipse .aether .collection .CollectRequest ;
45+ import org .eclipse .aether .metadata .DefaultMetadata ;
46+ import org .eclipse .aether .metadata .Metadata ;
4347import org .eclipse .aether .repository .RemoteRepository ;
48+ import org .eclipse .aether .repository .RepositoryPolicy ;
4449import org .eclipse .aether .resolution .DependencyRequest ;
50+ import org .eclipse .aether .resolution .MetadataRequest ;
51+ import org .eclipse .aether .resolution .MetadataResult ;
4552
4653/**
4754 * 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 {
6875 @ Parameter
6976 private File file ;
7077
78+ /**
79+ * A list of groupIds to resolve metadata.
80+ */
81+ @ Parameter
82+ private List <String > groupsToResolve ;
83+
7184 @ Component
7285 private RepositorySystem repositorySystem ;
7386
@@ -76,6 +89,16 @@ public class DownloadMojo extends AbstractMojo {
7689
7790 @ Override
7891 public void execute () throws MojoFailureException {
92+
93+ ProjectBuildingRequest projectBuildingRequest = session .getProjectBuildingRequest ();
94+ RepositorySystemSession repositorySystemSession = projectBuildingRequest .getRepositorySession ();
95+ List <RemoteRepository > repos = RepositoryUtils .toRepos (projectBuildingRequest .getRemoteRepositories ());
96+
97+ if (groupsToResolve != null && !groupsToResolve .isEmpty ()) {
98+ resolveMetaData (groupsToResolve , repositorySystemSession , repos );
99+ return ;
100+ }
101+
79102 // this or that: either resolver file listed artifacts or collect lifecycle packaging plugins
80103 if (file != null && file .exists ()) {
81104 System .out .println ("Collecting artifacts from file: " + file );
@@ -101,10 +124,6 @@ public void execute() throws MojoFailureException {
101124 }
102125 }
103126
104- ProjectBuildingRequest projectBuildingRequest = session .getProjectBuildingRequest ();
105- RepositorySystemSession repositorySystemSession = projectBuildingRequest .getRepositorySession ();
106- List <RemoteRepository > repos = RepositoryUtils .toRepos (projectBuildingRequest .getRemoteRepositories ());
107-
108127 for (Dependency dependency : dependencies ) {
109128 try {
110129 org .eclipse .aether .graph .Dependency root =
@@ -138,4 +157,34 @@ static Dependency toDependency(String artifact) throws MojoFailureException {
138157 }
139158 return coordinate ;
140159 }
160+
161+ /**
162+ * Resolve metadata for maven plugins needs for MavenITmng7353CliGoalInvocationTest.
163+ */
164+ private void resolveMetaData (
165+ List <String > groupsToResolve ,
166+ RepositorySystemSession repositorySystemSession ,
167+ List <RemoteRepository > repos ) {
168+
169+ getLog ().info ("Resolving metadata for groups: " + groupsToResolve );
170+
171+ List <MetadataRequest > requests = new ArrayList <>();
172+
173+ for (String groupId : groupsToResolve ) {
174+ Metadata metadata =
175+ new DefaultMetadata (groupId , "maven-metadata.xml" , DefaultMetadata .Nature .RELEASE_OR_SNAPSHOT );
176+ for (RemoteRepository repository : repos ) {
177+ requests .add (new MetadataRequest (metadata , repository , "plugin" ));
178+ }
179+ }
180+
181+ DefaultRepositorySystemSession session = new DefaultRepositorySystemSession (repositorySystemSession );
182+ session .setUpdatePolicy (RepositoryPolicy .UPDATE_POLICY_ALWAYS );
183+
184+ List <MetadataResult > metadataResults = repositorySystem .resolveMetadata (session , requests );
185+ for (MetadataResult metadataResult : metadataResults ) {
186+ getLog ().info ("metadata result: " + metadataResult .toString () + " from repository: "
187+ + metadataResult .getRequest ().getRepository ());
188+ }
189+ }
141190}
0 commit comments