private void resolveExtraArtifacts()

in src/main/java/org/apache/maven/plugins/invoker/InstallMojo.java [253:310]


    private void resolveExtraArtifacts(Map<String, Artifact> resolvedArtifacts)
            throws MojoExecutionException, DependencyResolutionException, ArtifactResolutionException {

        if (extraArtifacts == null) {
            return;
        }

        DependencyFilter classpathFilter = DependencyFilterUtils.classpathFilter(JavaScopes.RUNTIME);

        for (String extraArtifact : extraArtifacts) {
            String[] gav = extraArtifact.split(":");
            if (gav.length < 3 || gav.length > 5) {
                throw new MojoExecutionException("Invalid artifact " + extraArtifact);
            }

            String groupId = gav[0];
            String artifactId = gav[1];
            String version = gav[2];

            String type = "jar";
            if (gav.length > 3) {
                type = gav[3];
            }

            String classifier = null;
            if (gav.length == 5) {
                classifier = gav[4];
            }

            ArtifactType artifactType =
                    session.getRepositorySession().getArtifactTypeRegistry().get(type);

            List<RemoteRepository> remoteRepositories =
                    artifactType != null && "maven-plugin".equals(artifactType.getId())
                            ? project.getRemotePluginRepositories()
                            : project.getRemoteProjectRepositories();

            Artifact artifact = new DefaultArtifact(groupId, artifactId, classifier, null, version, artifactType);

            resolvePomsForArtifacts(Collections.singletonList(artifact), resolvedArtifacts, remoteRepositories);

            CollectRequest collectRequest = new CollectRequest();
            Dependency root = new Dependency(artifact, JavaScopes.COMPILE);
            collectRequest.setRoot(root);
            collectRequest.setRepositories(remoteRepositories);

            DependencyRequest request = new DependencyRequest(collectRequest, classpathFilter);
            DependencyResult dependencyResult =
                    repositorySystem.resolveDependencies(session.getRepositorySession(), request);

            List<Artifact> artifacts = dependencyResult.getArtifactResults().stream()
                    .map(ArtifactResult::getArtifact)
                    .collect(Collectors.toList());

            artifacts.forEach(a -> resolvedArtifacts.put(ArtifactIdUtils.toId(a), a));
            resolvePomsForArtifacts(artifacts, resolvedArtifacts, collectRequest.getRepositories());
        }
    }