compat/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/PluginsMetadataGenerator.java [91:175]:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    @Override
    public Collection<? extends Metadata> prepare(Collection<? extends Artifact> artifacts) {
        return Collections.emptyList();
    }

    @Override
    public Artifact transformArtifact(Artifact artifact) {
        return artifact;
    }

    @Override
    public Collection<? extends Metadata> finish(Collection<? extends Artifact> artifacts) {
        LinkedHashMap<String, PluginsMetadata> plugins = new LinkedHashMap<>();
        for (Artifact artifact : artifacts) {
            PluginInfo pluginInfo = extractPluginInfo(artifact);
            if (pluginInfo != null) {
                String key = pluginInfo.groupId;
                if (processedPlugins.get(key) == null) {
                    PluginsMetadata pluginMetadata = plugins.get(key);
                    if (pluginMetadata == null) {
                        pluginMetadata = new PluginsMetadata(pluginInfo, timestamp);
                        plugins.put(key, pluginMetadata);
                    }
                }
            }
        }
        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.getPath() != null) {
            Path artifactPath = artifact.getPath();
            if (Files.isRegularFile(artifactPath)) {
                try (JarFile artifactJar = new JarFile(artifactPath.toFile(), false)) {
                    ZipEntry pluginDescriptorEntry = artifactJar.getEntry(PLUGIN_DESCRIPTOR_LOCATION);

                    if (pluginDescriptorEntry != null) {
                        try (InputStream is = 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)
                            XmlNode root = XmlService.read(is, null);
                            String groupId = mayGetChild(root, "groupId");
                            String artifactId = mayGetChild(root, "artifactId");
                            String goalPrefix = mayGetChild(root, "goalPrefix");
                            String name = mayGetChild(root, "name");
                            // sanity check: plugin descriptor extracted from artifact must have same GA
                            if (Objects.equals(artifact.getGroupId(), groupId)
                                    && Objects.equals(artifact.getArtifactId(), artifactId)) {
                                // here groupId and artifactId cannot be null
                                return new PluginInfo(groupId, artifactId, goalPrefix, name);
                            } else {
                                logger.warn(
                                        "Artifact {}:{}"
                                                + " JAR (about to be installed/deployed) contains Maven Plugin metadata for"
                                                + " conflicting coordinates: {}:{}."
                                                + " Your JAR contains rogue Maven Plugin metadata."
                                                + " Possible causes may be: shaded into this JAR some Maven Plugin or some rogue resource.",
                                        artifact.getGroupId(),
                                        artifact.getArtifactId(),
                                        groupId,
                                        artifactId);
                            }
                        }
                    }
                } catch (Exception e) {
                    // here we can have: IO. ZIP or Plexus Conf Ex: but we should not interfere with user intent
                }
            }
        }
        return null;
    }

    private static String mayGetChild(XmlNode node, String child) {
        XmlNode c = node.child(child);
        if (c != null) {
            return c.value();
        }
        return null;
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -



impl/maven-impl/src/main/java/org/apache/maven/impl/resolver/PluginsMetadataGenerator.java [90:174]:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    @Override
    public Collection<? extends Metadata> prepare(Collection<? extends Artifact> artifacts) {
        return Collections.emptyList();
    }

    @Override
    public Artifact transformArtifact(Artifact artifact) {
        return artifact;
    }

    @Override
    public Collection<? extends Metadata> finish(Collection<? extends Artifact> artifacts) {
        LinkedHashMap<String, PluginsMetadata> plugins = new LinkedHashMap<>();
        for (Artifact artifact : artifacts) {
            PluginInfo pluginInfo = extractPluginInfo(artifact);
            if (pluginInfo != null) {
                String key = pluginInfo.groupId;
                if (processedPlugins.get(key) == null) {
                    PluginsMetadata pluginMetadata = plugins.get(key);
                    if (pluginMetadata == null) {
                        pluginMetadata = new PluginsMetadata(pluginInfo, timestamp);
                        plugins.put(key, pluginMetadata);
                    }
                }
            }
        }
        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.getPath() != null) {
            Path artifactPath = artifact.getPath();
            if (Files.isRegularFile(artifactPath)) {
                try (JarFile artifactJar = new JarFile(artifactPath.toFile(), false)) {
                    ZipEntry pluginDescriptorEntry = artifactJar.getEntry(PLUGIN_DESCRIPTOR_LOCATION);

                    if (pluginDescriptorEntry != null) {
                        try (InputStream is = 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)
                            XmlNode root = XmlService.read(is, null);
                            String groupId = mayGetChild(root, "groupId");
                            String artifactId = mayGetChild(root, "artifactId");
                            String goalPrefix = mayGetChild(root, "goalPrefix");
                            String name = mayGetChild(root, "name");
                            // sanity check: plugin descriptor extracted from artifact must have same GA
                            if (Objects.equals(artifact.getGroupId(), groupId)
                                    && Objects.equals(artifact.getArtifactId(), artifactId)) {
                                // here groupId and artifactId cannot be null
                                return new PluginInfo(groupId, artifactId, goalPrefix, name);
                            } else {
                                logger.warn(
                                        "Artifact {}:{}"
                                                + " JAR (about to be installed/deployed) contains Maven Plugin metadata for"
                                                + " conflicting coordinates: {}:{}."
                                                + " Your JAR contains rogue Maven Plugin metadata."
                                                + " Possible causes may be: shaded into this JAR some Maven Plugin or some rogue resource.",
                                        artifact.getGroupId(),
                                        artifact.getArtifactId(),
                                        groupId,
                                        artifactId);
                            }
                        }
                    }
                } catch (Exception e) {
                    // here we can have: IO. ZIP or Plexus Conf Ex: but we should not interfere with user intent
                }
            }
        }
        return null;
    }

    private static String mayGetChild(XmlNode node, String child) {
        XmlNode c = node.child(child);
        if (c != null) {
            return c.value();
        }
        return null;
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -



