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

gnodet pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/maven.git


The following commit(s) were added to refs/heads/master by this push:
     new 3bc2cf6a7 [MNG-7547] Simpler G level metadata generation (#806)
3bc2cf6a7 is described below

commit 3bc2cf6a7a9d151fb10a3197ae4412e2ca11437c
Author: Tamas Cservenak <[email protected]>
AuthorDate: Tue Oct 11 14:11:17 2022 +0200

    [MNG-7547] Simpler G level metadata generation (#806)
---
 .../main/java/org/apache/maven/api/Metadata.java   |  41 ------
 .../org/apache/maven/api/RepositoryMetadata.java   |  31 -----
 .../main/java/org/apache/maven/api/Session.java    |   4 -
 .../apache/maven/api/services/ArtifactManager.java |  13 --
 .../maven/api/services/LocalRepositoryManager.java |   5 -
 .../DefaultPluginsMetadataInfoProvider.java        | 137 ---------------------
 .../maven/internal/impl/AbstractSession.java       |  42 -------
 .../internal/impl/DefaultArtifactDeployer.java     |  13 +-
 .../internal/impl/DefaultArtifactInstaller.java    |  16 +--
 .../internal/impl/DefaultArtifactManager.java      |  24 +---
 .../impl/DefaultLocalRepositoryManager.java        |  19 ---
 .../repository/internal/LocalSnapshotMetadata.java |   2 +-
 .../internal/LocalSnapshotMetadataGenerator.java   |   6 +-
 .../maven/repository/internal/PluginsMetadata.java |  41 +++---
 .../internal/PluginsMetadataGenerator.java         |  91 ++++++++++----
 .../internal/PluginsMetadataGeneratorFactory.java  |  20 +--
 .../internal/PluginsMetadataInfoProvider.java      |  47 -------
 .../internal/RemoteSnapshotMetadata.java           |   2 +-
 .../internal/RemoteSnapshotMetadataGenerator.java  |   6 +-
 .../internal/SnapshotMetadataGeneratorFactory.java |  10 +-
 .../repository/internal/VersionsMetadata.java      |   2 +-
 .../internal/VersionsMetadataGenerator.java        |   4 +-
 .../internal/VersionsMetadataGeneratorFactory.java |  10 +-
 23 files changed, 127 insertions(+), 459 deletions(-)

diff --git 
a/api/maven-api-core/src/main/java/org/apache/maven/api/Metadata.java 
b/api/maven-api-core/src/main/java/org/apache/maven/api/Metadata.java
deleted file mode 100644
index d86aef648..000000000
--- a/api/maven-api-core/src/main/java/org/apache/maven/api/Metadata.java
+++ /dev/null
@@ -1,41 +0,0 @@
-package org.apache.maven.api;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import org.apache.maven.api.annotations.Experimental;
-
-/**
- * TODO: investigate removing the Metadata api completely
- *
- * @since 4.0
- */
-@Experimental
-public interface Metadata
-{
-
-    String getGroupId();
-
-    String getArtifactId();
-
-    String getVersion();
-
-    MetadataStorage getStorage();
-
-}
diff --git 
a/api/maven-api-core/src/main/java/org/apache/maven/api/RepositoryMetadata.java 
b/api/maven-api-core/src/main/java/org/apache/maven/api/RepositoryMetadata.java
deleted file mode 100644
index a64879658..000000000
--- 
a/api/maven-api-core/src/main/java/org/apache/maven/api/RepositoryMetadata.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package org.apache.maven.api;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import org.apache.maven.api.annotations.Experimental;
-
-/**
- *
- * @since 4.0
- */
-@Experimental
-public interface RepositoryMetadata extends Metadata
-{
-}
diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/Session.java 
b/api/maven-api-core/src/main/java/org/apache/maven/api/Session.java
index 5e0e3808d..758d227f1 100644
--- a/api/maven-api-core/src/main/java/org/apache/maven/api/Session.java
+++ b/api/maven-api-core/src/main/java/org/apache/maven/api/Session.java
@@ -318,12 +318,8 @@ public interface Session
 
     Path getPathForLocalArtifact( @Nonnull Artifact artifact );
 
-    Path getPathForLocalMetadata( Metadata metadata );
-
     Path getPathForRemoteArtifact( RemoteRepository remote, Artifact artifact 
);
 
-    Path getPathForRemoteMetadata( RemoteRepository remote, Metadata metadata 
);
-
     /**
      * Shortcut for 
<code>getService(VersionParser.class).parseVersion(...)</code>
      * @see org.apache.maven.api.services.VersionParser#parseVersion(String)
diff --git 
a/api/maven-api-core/src/main/java/org/apache/maven/api/services/ArtifactManager.java
 
b/api/maven-api-core/src/main/java/org/apache/maven/api/services/ArtifactManager.java
index 4fa771343..70d8f6c14 100644
--- 
a/api/maven-api-core/src/main/java/org/apache/maven/api/services/ArtifactManager.java
+++ 
b/api/maven-api-core/src/main/java/org/apache/maven/api/services/ArtifactManager.java
@@ -24,11 +24,9 @@ import org.apache.maven.api.annotations.Experimental;
 import org.apache.maven.api.annotations.Nonnull;
 
 import java.nio.file.Path;
-import java.util.Collection;
 import java.util.Optional;
 
 import org.apache.maven.api.Artifact;
-import org.apache.maven.api.Metadata;
 
 /**
  *
@@ -50,15 +48,4 @@ public interface ArtifactManager extends Service
      */
     void setPath( @Nonnull Artifact artifact, Path path );
 
-    /**
-     * TODO: investigate removing the Metadata api completely
-     */
-    @Nonnull
-    Collection<Metadata> getAttachedMetadatas( @Nonnull Artifact artifact );
-
-    /**
-     * TODO: investigate removing the Metadata api completely
-     */
-    void attachMetadata( @Nonnull Artifact artifact, @Nonnull Metadata 
metadata );
-
 }
diff --git 
a/api/maven-api-core/src/main/java/org/apache/maven/api/services/LocalRepositoryManager.java
 
b/api/maven-api-core/src/main/java/org/apache/maven/api/services/LocalRepositoryManager.java
index 5e40ac83f..ce813462c 100644
--- 
a/api/maven-api-core/src/main/java/org/apache/maven/api/services/LocalRepositoryManager.java
+++ 
b/api/maven-api-core/src/main/java/org/apache/maven/api/services/LocalRepositoryManager.java
@@ -23,7 +23,6 @@ import java.nio.file.Path;
 
 import org.apache.maven.api.Artifact;
 import org.apache.maven.api.LocalRepository;
-import org.apache.maven.api.Metadata;
 import org.apache.maven.api.RemoteRepository;
 import org.apache.maven.api.Service;
 import org.apache.maven.api.Session;
@@ -39,10 +38,6 @@ public interface LocalRepositoryManager extends Service
 
     Path getPathForLocalArtifact( Session session, LocalRepository local, 
Artifact artifact );
 
-    Path getPathForLocalMetadata( Session session, LocalRepository local, 
Metadata metadata );
-
     Path getPathForRemoteArtifact( Session session, LocalRepository local, 
RemoteRepository remote, Artifact artifact );
 
-    Path getPathForRemoteMetadata( Session session, LocalRepository local, 
RemoteRepository remote, Metadata metadata );
-
 }
diff --git 
a/maven-core/src/main/java/org/apache/maven/execution/infoproviders/DefaultPluginsMetadataInfoProvider.java
 
b/maven-core/src/main/java/org/apache/maven/execution/infoproviders/DefaultPluginsMetadataInfoProvider.java
deleted file mode 100644
index 616a3a88a..000000000
--- 
a/maven-core/src/main/java/org/apache/maven/execution/infoproviders/DefaultPluginsMetadataInfoProvider.java
+++ /dev/null
@@ -1,137 +0,0 @@
-package org.apache.maven.execution.infoproviders;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import java.util.Objects;
-
-import javax.inject.Inject;
-import javax.inject.Named;
-import javax.inject.Provider;
-import javax.inject.Singleton;
-
-import org.apache.maven.artifact.repository.metadata.Metadata;
-import org.apache.maven.artifact.repository.metadata.Plugin;
-import org.apache.maven.artifact.repository.metadata.RepositoryMetadata;
-import org.apache.maven.execution.MavenSession;
-import org.apache.maven.project.MavenProject;
-import org.apache.maven.repository.internal.PluginsMetadataInfoProvider;
-import org.apache.maven.repository.legacy.metadata.ArtifactMetadata;
-import org.eclipse.aether.artifact.Artifact;
-
-import static java.util.Objects.requireNonNull;
-
-/**
- * Default implementation of {@link PluginsMetadataInfoProvider}.
- */
-@Named
-@Singleton
-public class DefaultPluginsMetadataInfoProvider
-    implements PluginsMetadataInfoProvider
-{
-    private final Provider<MavenSession> mavenSessionProvider;
-
-    @Inject
-    public DefaultPluginsMetadataInfoProvider( final Provider<MavenSession> 
mavenSessionProvider )
-    {
-        this.mavenSessionProvider = requireNonNull( mavenSessionProvider );
-    }
-
-    @Override
-    public PluginInfo getPluginInfo( final Artifact artifact )
-    {
-        MavenSession mavenSession = mavenSessionProvider.get();
-        if ( mavenSession != null )
-        {
-            MavenProject mavenProject = searchForProject( mavenSession, 
artifact );
-            if ( mavenProject != null && "maven-plugin".equals( 
mavenProject.getPackaging() ) )
-            {
-                Plugin plugin = searchForPluginGroupLevelRepositoryMetadata( 
mavenProject );
-
-                if ( plugin != null )
-                {
-                    return new PluginInfo()
-                    {
-                        @Override
-                        public String getPluginGroupId()
-                        {
-                            return artifact.getGroupId();
-                        }
-
-                        @Override
-                        public String getPluginArtifactId()
-                        {
-                            return artifact.getArtifactId();
-                        }
-
-                        @Override
-                        public String getPluginPrefix()
-                        {
-                            return plugin.getPrefix();
-                        }
-
-                        @Override
-                        public String getPluginName()
-                        {
-                            return plugin.getName();
-                        }
-                    };
-                }
-            }
-        }
-
-        return null;
-    }
-
-    private MavenProject searchForProject( MavenSession mavenSession, Artifact 
artifact )
-    {
-        for ( MavenProject mavenProject : mavenSession.getProjects() )
-        {
-            if ( mavenProject.getArtifact() != null
-                && Objects.equals( mavenProject.getGroupId(), 
artifact.getGroupId() )
-                && Objects.equals( mavenProject.getArtifactId(), 
artifact.getArtifactId() ) )
-            {
-                return mavenProject;
-            }
-        }
-        return null;
-    }
-
-    private Plugin searchForPluginGroupLevelRepositoryMetadata( MavenProject 
mavenProject )
-    {
-        org.apache.maven.artifact.Artifact projectArtifact = 
mavenProject.getArtifact();
-        for ( ArtifactMetadata artifactMetadata : 
projectArtifact.getMetadataList() )
-        {
-            if ( artifactMetadata instanceof RepositoryMetadata )
-            {
-                RepositoryMetadata repositoryMetadata = (RepositoryMetadata) 
artifactMetadata;
-                Metadata metadata = repositoryMetadata.getMetadata();
-
-                for ( Plugin plugin : metadata.getPlugins() )
-                {
-                    if ( Objects.equals( plugin.getArtifactId(), 
mavenProject.getArtifactId() ) )
-                    {
-                        return plugin;
-                    }
-                }
-            }
-        }
-        return null;
-    }
-}
diff --git 
a/maven-core/src/main/java/org/apache/maven/internal/impl/AbstractSession.java 
b/maven-core/src/main/java/org/apache/maven/internal/impl/AbstractSession.java
index de1bfdc62..11738ba06 100644
--- 
a/maven-core/src/main/java/org/apache/maven/internal/impl/AbstractSession.java
+++ 
b/maven-core/src/main/java/org/apache/maven/internal/impl/AbstractSession.java
@@ -39,7 +39,6 @@ import org.apache.maven.api.Dependency;
 import org.apache.maven.api.DependencyCoordinate;
 import org.apache.maven.api.Listener;
 import org.apache.maven.api.LocalRepository;
-import org.apache.maven.api.Metadata;
 import org.apache.maven.api.Node;
 import org.apache.maven.api.Project;
 import org.apache.maven.api.RemoteRepository;
@@ -219,33 +218,6 @@ public abstract class AbstractSession implements Session
         );
     }
 
-    public org.eclipse.aether.metadata.Metadata toMetadata( Metadata metadata )
-    {
-        /*
-        if ( metadata instanceof ProjectArtifactMetadata )
-        {
-            Artifact pomArtifact = new SubArtifact( mainArtifact, "", "pom" );
-            pomArtifact = pomArtifact.setFile( ( (ProjectArtifactMetadata) 
metadata ).getFile() );
-            request.addArtifact( pomArtifact );
-        }
-        else if ( // metadata instanceof SnapshotArtifactRepositoryMetadata ||
-                metadata instanceof ArtifactRepositoryMetadata )
-        {
-            // eaten, handled by repo system
-        }
-        else if ( metadata instanceof 
org.apache.maven.shared.transfer.metadata.ArtifactMetadata )
-        {
-            org.apache.maven.shared.transfer.metadata.ArtifactMetadata 
transferMetadata =
-                    
(org.apache.maven.shared.transfer.metadata.ArtifactMetadata) metadata;
-
-            request.addMetadata( new Maven31MetadataBridge( metadata 
).setFile( transferMetadata.getFile() ) );
-        }
-
-         */
-        // TODO
-        throw new UnsupportedOperationException( "Not implemented yet" );
-    }
-
     @Override
     public void registerListener( @Nonnull Listener listener )
     {
@@ -586,13 +558,6 @@ public abstract class AbstractSession implements Session
                 .getPathForLocalArtifact( this, getLocalRepository(), artifact 
);
     }
 
-    @Override
-    public Path getPathForLocalMetadata( Metadata metadata )
-    {
-        return getService( LocalRepositoryManager.class )
-                .getPathForLocalMetadata( this, getLocalRepository(), metadata 
);
-    }
-
     @Override
     public Path getPathForRemoteArtifact( RemoteRepository remote, Artifact 
artifact )
     {
@@ -600,13 +565,6 @@ public abstract class AbstractSession implements Session
                 .getPathForRemoteArtifact( this, getLocalRepository(), remote, 
artifact );
     }
 
-    @Override
-    public Path getPathForRemoteMetadata( RemoteRepository remote, Metadata 
metadata )
-    {
-        return getService( LocalRepositoryManager.class )
-                .getPathForRemoteMetadata( this, getLocalRepository(), remote, 
metadata );
-    }
-
     @Override
     public Version parseVersion( String version )
     {
diff --git 
a/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultArtifactDeployer.java
 
b/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultArtifactDeployer.java
index 8a0c45541..c117b84d5 100644
--- 
a/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultArtifactDeployer.java
+++ 
b/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultArtifactDeployer.java
@@ -27,18 +27,14 @@ import javax.inject.Named;
 import javax.inject.Singleton;
 
 import java.util.Collection;
-import java.util.List;
-import java.util.stream.Collectors;
 
 import org.apache.maven.api.services.ArtifactDeployer;
 import org.apache.maven.api.services.ArtifactDeployerException;
 import org.apache.maven.api.services.ArtifactDeployerRequest;
-import org.apache.maven.api.services.ArtifactManager;
 import org.eclipse.aether.RepositorySystem;
 import org.eclipse.aether.deployment.DeployRequest;
 import org.eclipse.aether.deployment.DeployResult;
 import org.eclipse.aether.deployment.DeploymentException;
-import org.eclipse.aether.metadata.Metadata;
 
 import static org.apache.maven.internal.impl.Utils.cast;
 import static org.apache.maven.internal.impl.Utils.nonNull;
@@ -68,16 +64,9 @@ public class DefaultArtifactDeployer implements 
ArtifactDeployer
         RemoteRepository repository = nonNull( request.getRepository(), 
"request.repository can not be null" );
         try
         {
-            ArtifactManager artifactManager = session.getService( 
ArtifactManager.class );
-            List<Metadata> metadatas = artifacts.stream()
-                    .map( artifactManager::getAttachedMetadatas )
-                    .flatMap( Collection::stream )
-                    .map( session::toMetadata )
-                    .collect( Collectors.toList() );
             DeployRequest deployRequest = new DeployRequest()
                     .setRepository( session.toRepository( repository ) )
-                    .setArtifacts( session.toArtifacts( artifacts ) )
-                    .setMetadata( metadatas );
+                    .setArtifacts( session.toArtifacts( artifacts ) );
 
             DeployResult result = repositorySystem.deploy( 
session.getSession(), deployRequest );
         }
diff --git 
a/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultArtifactInstaller.java
 
b/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultArtifactInstaller.java
index 183db6a8a..abe910a2e 100644
--- 
a/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultArtifactInstaller.java
+++ 
b/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultArtifactInstaller.java
@@ -24,20 +24,13 @@ import javax.inject.Named;
 import javax.inject.Singleton;
 
 import org.apache.maven.api.annotations.Nonnull;
-
-import java.util.Collection;
-import java.util.List;
-import java.util.stream.Collectors;
-
 import org.apache.maven.api.services.ArtifactInstaller;
 import org.apache.maven.api.services.ArtifactInstallerException;
 import org.apache.maven.api.services.ArtifactInstallerRequest;
-import org.apache.maven.api.services.ArtifactManager;
 import org.eclipse.aether.RepositorySystem;
 import org.eclipse.aether.installation.InstallRequest;
 import org.eclipse.aether.installation.InstallResult;
 import org.eclipse.aether.installation.InstallationException;
-import org.eclipse.aether.metadata.Metadata;
 
 import static org.apache.maven.internal.impl.Utils.cast;
 import static org.apache.maven.internal.impl.Utils.nonNull;
@@ -63,15 +56,8 @@ public class DefaultArtifactInstaller implements 
ArtifactInstaller
                 "request.session should be a " + DefaultSession.class );
         try
         {
-            ArtifactManager artifactManager = session.getService( 
ArtifactManager.class );
-            List<Metadata> metadatas = request.getArtifacts().stream()
-                    .map( artifactManager::getAttachedMetadatas )
-                    .flatMap( Collection::stream )
-                    .map( session::toMetadata )
-                    .collect( Collectors.toList() );
             InstallRequest installRequest = new InstallRequest()
-                    .setArtifacts( session.toArtifacts( request.getArtifacts() 
) )
-                    .setMetadata( metadatas );
+                    .setArtifacts( session.toArtifacts( request.getArtifacts() 
) );
 
             InstallResult result = repositorySystem.install( 
session.getSession(), installRequest );
         }
diff --git 
a/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultArtifactManager.java
 
b/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultArtifactManager.java
index a4b0961d7..829c71474 100644
--- 
a/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultArtifactManager.java
+++ 
b/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultArtifactManager.java
@@ -22,20 +22,15 @@ package org.apache.maven.internal.impl;
 import javax.inject.Inject;
 import javax.inject.Named;
 
-import org.apache.maven.SessionScoped;
-import org.apache.maven.api.annotations.Nonnull;
-
 import java.io.File;
 import java.nio.file.Path;
-import java.util.Collection;
-import java.util.Collections;
 import java.util.Map;
 import java.util.Optional;
 import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.CopyOnWriteArrayList;
 
+import org.apache.maven.SessionScoped;
 import org.apache.maven.api.Artifact;
-import org.apache.maven.api.Metadata;
+import org.apache.maven.api.annotations.Nonnull;
 import org.apache.maven.api.services.ArtifactManager;
 import org.apache.maven.project.MavenProject;
 
@@ -47,7 +42,6 @@ public class DefaultArtifactManager implements ArtifactManager
     @Nonnull
     private final DefaultSession session;
     private final Map<String, Path> paths = new ConcurrentHashMap<>();
-    private final Map<String, Collection<Metadata>> metadatas = new 
ConcurrentHashMap<>();
 
     @Inject
     public DefaultArtifactManager( @Nonnull DefaultSession session )
@@ -107,20 +101,6 @@ public class DefaultArtifactManager implements 
ArtifactManager
         }
     }
 
-    @Nonnull
-    @Override
-    public Collection<Metadata> getAttachedMetadatas( @Nonnull Artifact 
artifact )
-    {
-        Collection<Metadata> m = metadatas.get( id( artifact ) );
-        return m != null ? Collections.unmodifiableCollection( m ) : 
Collections.emptyList();
-    }
-
-    @Override
-    public void attachMetadata( @Nonnull Artifact artifact, @Nonnull Metadata 
metadata )
-    {
-        metadatas.computeIfAbsent( id( artifact ), a -> new 
CopyOnWriteArrayList<>() ).add( metadata );
-    }
-
     private String id( org.apache.maven.artifact.Artifact artifact )
     {
         return artifact.getGroupId()
diff --git 
a/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultLocalRepositoryManager.java
 
b/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultLocalRepositoryManager.java
index ec97dc765..95a788391 100644
--- 
a/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultLocalRepositoryManager.java
+++ 
b/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultLocalRepositoryManager.java
@@ -26,7 +26,6 @@ import java.nio.file.Path;
 
 import org.apache.maven.api.Artifact;
 import org.apache.maven.api.LocalRepository;
-import org.apache.maven.api.Metadata;
 import org.apache.maven.api.RemoteRepository;
 import org.apache.maven.api.Session;
 import org.apache.maven.api.services.LocalRepositoryManager;
@@ -44,14 +43,6 @@ public class DefaultLocalRepositoryManager implements 
LocalRepositoryManager
         return local.getPath().resolve( path );
     }
 
-    @Override
-    public Path getPathForLocalMetadata( Session session, LocalRepository 
local, Metadata metadata )
-    {
-        DefaultSession s = (DefaultSession) session;
-        String path = getManager( s, local ).getPathForLocalMetadata( 
s.toMetadata( metadata ) );
-        return local.getPath().resolve( path );
-    }
-
     @Override
     public Path getPathForRemoteArtifact( Session session, LocalRepository 
local,
                                           RemoteRepository remote, Artifact 
artifact )
@@ -62,16 +53,6 @@ public class DefaultLocalRepositoryManager implements 
LocalRepositoryManager
         return local.getPath().resolve( path );
     }
 
-    @Override
-    public Path getPathForRemoteMetadata( Session session, LocalRepository 
local,
-                                          RemoteRepository remote, Metadata 
metadata )
-    {
-        DefaultSession s = (DefaultSession) session;
-        String path = getManager( s, local ).getPathForRemoteMetadata(
-                s.toMetadata( metadata ), s.toRepository( remote ), null );
-        return local.getPath().resolve( path );
-    }
-
     private org.eclipse.aether.repository.LocalRepositoryManager getManager(
             DefaultSession session, LocalRepository local )
     {
diff --git 
a/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/LocalSnapshotMetadata.java
 
b/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/LocalSnapshotMetadata.java
index 453e4d2be..d2bc84a8e 100644
--- 
a/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/LocalSnapshotMetadata.java
+++ 
b/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/LocalSnapshotMetadata.java
@@ -33,7 +33,7 @@ import 
org.apache.maven.artifact.repository.metadata.Versioning;
 import org.eclipse.aether.artifact.Artifact;
 
 /**
- * @author Benjamin Bentmann
+ * Maven local GAV level metadata.
  */
 final class LocalSnapshotMetadata
     extends MavenMetadata
diff --git 
a/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/LocalSnapshotMetadataGenerator.java
 
b/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/LocalSnapshotMetadataGenerator.java
index 75b4e6b93..3e2503c30 100644
--- 
a/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/LocalSnapshotMetadataGenerator.java
+++ 
b/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/LocalSnapshotMetadataGenerator.java
@@ -33,10 +33,12 @@ import org.eclipse.aether.metadata.Metadata;
 import org.eclipse.aether.util.ConfigUtils;
 
 /**
- * @author Benjamin Bentmann
+ * Maven local GAV level metadata generator.
+ * <p>
+ * Local snapshot metadata contains non-transformed snapshot version.
  */
 class LocalSnapshotMetadataGenerator
-    implements MetadataGenerator
+        implements MetadataGenerator
 {
 
     private Map<Object, LocalSnapshotMetadata> snapshots;
diff --git 
a/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/PluginsMetadata.java
 
b/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/PluginsMetadata.java
index 7a6c45abf..4c32b2df9 100644
--- 
a/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/PluginsMetadata.java
+++ 
b/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/PluginsMetadata.java
@@ -27,15 +27,32 @@ import java.util.List;
 
 import org.apache.maven.artifact.repository.metadata.Metadata;
 import org.apache.maven.artifact.repository.metadata.Plugin;
-import 
org.apache.maven.repository.internal.PluginsMetadataInfoProvider.PluginInfo;
-import org.eclipse.aether.artifact.Artifact;
 
 /**
- * Plugin G level metadata.
+ * Maven G level metadata.
  */
 final class PluginsMetadata
     extends MavenMetadata
 {
+    static final class PluginInfo
+    {
+        final String groupId;
+
+        private final String artifactId;
+
+        private final String goalPrefix;
+
+        private final String name;
+
+        PluginInfo( String groupId, String artifactId, String goalPrefix, 
String name )
+        {
+            this.groupId = groupId;
+            this.artifactId = artifactId;
+            this.goalPrefix = goalPrefix;
+            this.name = name;
+        }
+    }
+
     private final PluginInfo pluginInfo;
 
     PluginsMetadata( PluginInfo pluginInfo, Date timestamp )
@@ -54,9 +71,9 @@ final class PluginsMetadata
     {
         Metadata result = new Metadata();
         Plugin plugin = new Plugin();
-        plugin.setPrefix( pluginInfo.getPluginPrefix() );
-        plugin.setArtifactId( pluginInfo.getPluginArtifactId() );
-        plugin.setName( pluginInfo.getPluginName() );
+        plugin.setPrefix( pluginInfo.goalPrefix );
+        plugin.setArtifactId( pluginInfo.artifactId );
+        plugin.setName( pluginInfo.name );
         result.getPlugins().add( plugin );
         return result;
     }
@@ -75,16 +92,6 @@ final class PluginsMetadata
         }
     }
 
-    public Object getKey()
-    {
-        return getGroupId();
-    }
-
-    public static Object getKey( Artifact artifact )
-    {
-        return artifact.getGroupId();
-    }
-
     @Override
     public MavenMetadata setFile( File file )
     {
@@ -94,7 +101,7 @@ final class PluginsMetadata
     @Override
     public String getGroupId()
     {
-        return pluginInfo.getPluginGroupId();
+        return pluginInfo.groupId;
     }
 
     @Override
diff --git 
a/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/PluginsMetadataGenerator.java
 
b/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/PluginsMetadataGenerator.java
index 4f3556865..d1a954e84 100644
--- 
a/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/PluginsMetadataGenerator.java
+++ 
b/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/PluginsMetadataGenerator.java
@@ -19,14 +19,22 @@ package org.apache.maven.repository.internal;
  * under the License.
  */
 
+import java.io.Reader;
+import java.nio.file.Files;
+import java.nio.file.Path;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.Date;
 import java.util.Iterator;
 import java.util.LinkedHashMap;
 import java.util.Map;
+import java.util.jar.JarFile;
+import java.util.zip.ZipEntry;
 
-import 
org.apache.maven.repository.internal.PluginsMetadataInfoProvider.PluginInfo;
+import org.apache.maven.repository.internal.PluginsMetadata.PluginInfo;
+import org.codehaus.plexus.util.ReaderFactory;
+import org.codehaus.plexus.util.xml.Xpp3Dom;
+import org.codehaus.plexus.util.xml.Xpp3DomBuilder;
 import org.eclipse.aether.RepositorySystemSession;
 import org.eclipse.aether.artifact.Artifact;
 import org.eclipse.aether.deployment.DeployRequest;
@@ -35,42 +43,35 @@ import org.eclipse.aether.installation.InstallRequest;
 import org.eclipse.aether.metadata.Metadata;
 import org.eclipse.aether.util.ConfigUtils;
 
-import static java.util.Objects.requireNonNull;
-
 /**
- * Plugin G level metadata.
+ * Maven G level metadata generator.
+ * <p>
+ * Plugin metadata contains G level list of "prefix" to A mapping for plugins 
present under this G.
  */
 class PluginsMetadataGenerator
-    implements MetadataGenerator
+        implements MetadataGenerator
 {
-    private final PluginsMetadataInfoProvider pluginsMetadataInfoProvider;
-
-    private final Map<Object, PluginsMetadata> plugins;
+    private static final String PLUGIN_DESCRIPTOR_LOCATION = 
"META-INF/maven/plugin.xml";
 
     private final Map<Object, PluginsMetadata> processedPlugins;
 
     private final Date timestamp;
 
-    PluginsMetadataGenerator( PluginsMetadataInfoProvider 
pluginsMetadataInfoProvider,
-                              RepositorySystemSession session,
+    PluginsMetadataGenerator( RepositorySystemSession session,
                               InstallRequest request )
     {
-        this( pluginsMetadataInfoProvider, session, request.getMetadata() );
+        this( session, request.getMetadata() );
     }
 
-    PluginsMetadataGenerator( PluginsMetadataInfoProvider 
pluginsMetadataInfoProvider,
-                              RepositorySystemSession session,
+    PluginsMetadataGenerator( RepositorySystemSession session,
                               DeployRequest request )
     {
-        this( pluginsMetadataInfoProvider, session, request.getMetadata() );
+        this( session, request.getMetadata() );
     }
 
-    private PluginsMetadataGenerator( PluginsMetadataInfoProvider 
pluginsMetadataInfoProvider,
-                                      RepositorySystemSession session,
+    private PluginsMetadataGenerator( RepositorySystemSession session,
                                       Collection<? extends Metadata> metadatas 
)
     {
-        this.pluginsMetadataInfoProvider = requireNonNull( 
pluginsMetadataInfoProvider );
-        this.plugins = new LinkedHashMap<>();
         this.processedPlugins = new LinkedHashMap<>();
         this.timestamp = (Date) ConfigUtils.getObject( session, new Date(), 
"maven.startTime" );
 
@@ -86,8 +87,8 @@ class PluginsMetadataGenerator
             if ( metadata instanceof PluginsMetadata )
             {
                 it.remove();
-                PluginsMetadata pluginMetadata = ( PluginsMetadata ) metadata;
-                processedPlugins.put( pluginMetadata.getKey(), pluginMetadata 
);
+                PluginsMetadata pluginMetadata = (PluginsMetadata) metadata;
+                processedPlugins.put( pluginMetadata.getGroupId(), 
pluginMetadata );
             }
         }
     }
@@ -107,12 +108,13 @@ class PluginsMetadataGenerator
     @Override
     public Collection<? extends Metadata> finish( Collection<? extends 
Artifact> artifacts )
     {
+        LinkedHashMap<String, PluginsMetadata> plugins = new LinkedHashMap<>();
         for ( Artifact artifact : artifacts )
         {
-            PluginInfo pluginInfo = pluginsMetadataInfoProvider.getPluginInfo( 
artifact );
+            PluginInfo pluginInfo = extractPluginInfo( artifact );
             if ( pluginInfo != null )
             {
-                Object key = PluginsMetadata.getKey( artifact );
+                String key = pluginInfo.groupId;
                 if ( processedPlugins.get( key ) == null )
                 {
                     PluginsMetadata pluginMetadata = plugins.get( key );
@@ -124,7 +126,50 @@ class PluginsMetadataGenerator
                 }
             }
         }
-
         return plugins.values();
     }
+
+    private PluginInfo extractPluginInfo( Artifact artifact )
+    {
+        // sanity: jar, no classifier and file exists
+        if ( artifact != null
+                && "jar".equals( artifact.getExtension() )
+                && "".equals( artifact.getClassifier() )
+                && artifact.getFile() != null )
+        {
+            Path artifactPath = artifact.getFile().toPath();
+            if ( Files.isRegularFile( artifactPath ) )
+            {
+                try ( JarFile artifactJar = new JarFile( 
artifactPath.toFile(), false ) )
+                {
+                    ZipEntry pluginDescriptorEntry = artifactJar.getEntry( 
PLUGIN_DESCRIPTOR_LOCATION );
+
+                    if ( pluginDescriptorEntry != null )
+                    {
+                        try ( Reader reader = ReaderFactory.newXmlReader(
+                                artifactJar.getInputStream( 
pluginDescriptorEntry ) ) )
+                        {
+                            // Note: using DOM instead of use of
+                            // 
org.apache.maven.plugin.descriptor.PluginDescriptor
+                            // as it would pull in dependency on:
+                            // - maven-plugin-api (for model)
+                            // - Plexus Container (for model supporting 
classes and exceptions)
+                            Xpp3Dom root = Xpp3DomBuilder.build( reader );
+                            String groupId = root.getChild( "groupId" 
).getValue();
+                            String artifactId = root.getChild( "artifactId" 
).getValue();
+                            String goalPrefix = root.getChild( "goalPrefix" 
).getValue();
+                            String name = root.getChild( "name" ).getValue();
+                            return new PluginInfo( groupId, artifactId, 
goalPrefix, name );
+                        }
+
+                    }
+                }
+                catch ( Exception e )
+                {
+                    // here we can have: IO. ZIP or Plexus Conf Ex: but we 
should not interfere with user intent
+                }
+            }
+        }
+        return null;
+    }
 }
diff --git 
a/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/PluginsMetadataGeneratorFactory.java
 
b/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/PluginsMetadataGeneratorFactory.java
index 19d499b25..91bdfa887 100644
--- 
a/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/PluginsMetadataGeneratorFactory.java
+++ 
b/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/PluginsMetadataGeneratorFactory.java
@@ -19,7 +19,6 @@ package org.apache.maven.repository.internal;
  * under the License.
  */
 
-import javax.inject.Inject;
 import javax.inject.Named;
 import javax.inject.Singleton;
 
@@ -29,39 +28,30 @@ import org.eclipse.aether.impl.MetadataGenerator;
 import org.eclipse.aether.impl.MetadataGeneratorFactory;
 import org.eclipse.aether.installation.InstallRequest;
 
-import static java.util.Objects.requireNonNull;
-
 /**
- * Plugin G level metadata.
+ * Maven G level metadata generator factory.
  */
 @Named( "plugins" )
 @Singleton
 public class PluginsMetadataGeneratorFactory
     implements MetadataGeneratorFactory
 {
-    private final PluginsMetadataInfoProvider pluginsMetadataInfoProvider;
-
-    @Inject
-    public PluginsMetadataGeneratorFactory( PluginsMetadataInfoProvider 
pluginsMetadataInfoProvider )
-    {
-        this.pluginsMetadataInfoProvider = requireNonNull( 
pluginsMetadataInfoProvider );
-    }
-
     @Override
     public MetadataGenerator newInstance( RepositorySystemSession session, 
InstallRequest request )
     {
-        return new PluginsMetadataGenerator( pluginsMetadataInfoProvider, 
session, request );
+        return new PluginsMetadataGenerator( session, request );
     }
 
     @Override
     public MetadataGenerator newInstance( RepositorySystemSession session, 
DeployRequest request )
     {
-        return new PluginsMetadataGenerator( pluginsMetadataInfoProvider, 
session, request );
+        return new PluginsMetadataGenerator( session, request );
     }
 
+    @SuppressWarnings( "checkstyle:magicnumber" )
     @Override
     public float getPriority()
     {
-        return 5;
+        return 10; // G level MD should be deployed as 3rd MD
     }
 }
diff --git 
a/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/PluginsMetadataInfoProvider.java
 
b/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/PluginsMetadataInfoProvider.java
deleted file mode 100644
index 49b3aabf8..000000000
--- 
a/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/PluginsMetadataInfoProvider.java
+++ /dev/null
@@ -1,47 +0,0 @@
-package org.apache.maven.repository.internal;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import org.eclipse.aether.artifact.Artifact;
-
-/**
- * Plugin G level metadata provider.
- */
-public interface PluginsMetadataInfoProvider
-{
-    interface PluginInfo
-    {
-        String getPluginGroupId();
-
-        String getPluginArtifactId();
-
-        String getPluginPrefix();
-
-        String getPluginName();
-    }
-
-    /**
-     * Returns {@link PluginInfo} corresponding for passed in {@link 
Artifact}, or {@code null}.
-     *
-     * @param artifact the artifact
-     * @return the plugin info
-     */
-    PluginInfo getPluginInfo( Artifact artifact );
-}
diff --git 
a/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/RemoteSnapshotMetadata.java
 
b/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/RemoteSnapshotMetadata.java
index d9b56166a..f59b03a7e 100644
--- 
a/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/RemoteSnapshotMetadata.java
+++ 
b/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/RemoteSnapshotMetadata.java
@@ -36,7 +36,7 @@ import 
org.apache.maven.artifact.repository.metadata.Versioning;
 import org.eclipse.aether.artifact.Artifact;
 
 /**
- * @author Benjamin Bentmann
+ * Maven remote GAV level metadata.
  */
 final class RemoteSnapshotMetadata
     extends MavenSnapshotMetadata
diff --git 
a/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/RemoteSnapshotMetadataGenerator.java
 
b/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/RemoteSnapshotMetadataGenerator.java
index 2e42bee7d..6211cec67 100644
--- 
a/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/RemoteSnapshotMetadataGenerator.java
+++ 
b/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/RemoteSnapshotMetadataGenerator.java
@@ -33,10 +33,12 @@ import org.eclipse.aether.metadata.Metadata;
 import org.eclipse.aether.util.ConfigUtils;
 
 /**
- * @author Benjamin Bentmann
+ * Maven remote GAV level metadata generator.
+ * <p>
+ * Remote snapshot metadata converts artifact on-the-fly to use timestamped 
snapshot version, and enlist it accordingly.
  */
 class RemoteSnapshotMetadataGenerator
-    implements MetadataGenerator
+        implements MetadataGenerator
 {
 
     private final Map<Object, RemoteSnapshotMetadata> snapshots;
diff --git 
a/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/SnapshotMetadataGeneratorFactory.java
 
b/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/SnapshotMetadataGeneratorFactory.java
index ba6dadf1b..6d7304121 100644
--- 
a/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/SnapshotMetadataGeneratorFactory.java
+++ 
b/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/SnapshotMetadataGeneratorFactory.java
@@ -29,27 +29,29 @@ import org.eclipse.aether.impl.MetadataGeneratorFactory;
 import org.eclipse.aether.installation.InstallRequest;
 
 /**
- * @author Benjamin Bentmann
+ * Maven GAV level metadata generator factory.
  */
 @Named( "snapshot" )
 @Singleton
 public class SnapshotMetadataGeneratorFactory
     implements MetadataGeneratorFactory
 {
-
+    @Override
     public MetadataGenerator newInstance( RepositorySystemSession session, 
InstallRequest request )
     {
         return new LocalSnapshotMetadataGenerator( session, request );
     }
 
+    @Override
     public MetadataGenerator newInstance( RepositorySystemSession session, 
DeployRequest request )
     {
         return new RemoteSnapshotMetadataGenerator( session, request );
     }
 
+    @SuppressWarnings( "checkstyle:magicnumber" )
+    @Override
     public float getPriority()
     {
-        return 10;
+        return 30; // GAV level metadata should be deployed 1st MD
     }
-
 }
diff --git 
a/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/VersionsMetadata.java
 
b/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/VersionsMetadata.java
index 5103e5cae..a669933c6 100644
--- 
a/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/VersionsMetadata.java
+++ 
b/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/VersionsMetadata.java
@@ -31,7 +31,7 @@ import org.eclipse.aether.artifact.Artifact;
 import org.eclipse.aether.artifact.ArtifactProperties;
 
 /**
- * @author Benjamin Bentmann
+ * Maven GA level metadata.
  */
 final class VersionsMetadata
     extends MavenMetadata
diff --git 
a/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/VersionsMetadataGenerator.java
 
b/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/VersionsMetadataGenerator.java
index 409eec422..ec5c013cb 100644
--- 
a/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/VersionsMetadataGenerator.java
+++ 
b/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/VersionsMetadataGenerator.java
@@ -35,7 +35,9 @@ import org.eclipse.aether.metadata.Metadata;
 import org.eclipse.aether.util.ConfigUtils;
 
 /**
- * @author Benjamin Bentmann
+ * Maven GA level metadata generator.
+ *
+ * Version metadata contains list of existing baseVersions within this GA.
  */
 class VersionsMetadataGenerator
     implements MetadataGenerator
diff --git 
a/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/VersionsMetadataGeneratorFactory.java
 
b/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/VersionsMetadataGeneratorFactory.java
index eae836ab8..bf0d62bf8 100644
--- 
a/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/VersionsMetadataGeneratorFactory.java
+++ 
b/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/VersionsMetadataGeneratorFactory.java
@@ -29,27 +29,29 @@ import org.eclipse.aether.impl.MetadataGeneratorFactory;
 import org.eclipse.aether.installation.InstallRequest;
 
 /**
- * @author Benjamin Bentmann
+ * Maven GA level metadata generator factory.
  */
 @Named( "versions" )
 @Singleton
 public class VersionsMetadataGeneratorFactory
     implements MetadataGeneratorFactory
 {
-
+    @Override
     public MetadataGenerator newInstance( RepositorySystemSession session, 
InstallRequest request )
     {
         return new VersionsMetadataGenerator( session, request );
     }
 
+    @Override
     public MetadataGenerator newInstance( RepositorySystemSession session, 
DeployRequest request )
     {
         return new VersionsMetadataGenerator( session, request );
     }
 
+    @SuppressWarnings( "checkstyle:magicnumber" )
+    @Override
     public float getPriority()
     {
-        return 5;
+        return 20; // GA level metadata should be deployed 2nd MD
     }
-
 }


Reply via email to