public static Artifact getOrResolveArtifact()

in src/main/java/org/apache/sling/feature/maven/ProjectHelper.java [336:388]


    public static Artifact getOrResolveArtifact(final MavenProject project,
            final MavenSession session,
            final ArtifactHandlerManager artifactHandlerManager,
            final RepositorySystem repoSystem,
            final ArtifactId id) {
        @SuppressWarnings("unchecked")
        Map<String, Artifact> cache = (Map<String, Artifact>) project.getContextValue(ARTIFACT_CACHE);
        if ( cache == null ) {
            cache = new ConcurrentHashMap<>();
            project.setContextValue(ARTIFACT_CACHE, cache);
        }
        Artifact result = cache.get(id.toMvnId());
        if ( result == null ) {
            result = findArtifact(id, project.getAttachedArtifacts());
            if ( result == null ) {
                result = findArtifact(id, project.getDependencyArtifacts());
                if ( result == null ) {
                    if ( isLocalProjectArtifact(project, id)) {
                        for(final Map.Entry<String, Feature> entry : getFeatures(project).entrySet()) {
                            if ( entry.getValue().getId().equals(id)) {
                                final Artifact artifact = new DefaultArtifact(id.getGroupId(), id.getArtifactId(), id.getVersion(), Artifact.SCOPE_PROVIDED, id.getType(), id.getClassifier(), null);
                                artifact.setFile(createTmpFeatureFile(project, entry.getValue()));

                                result = artifact;
                                break;
                            }
                        }
                    }
                    if ( result == null ) {
                        try {
                            
                            org.eclipse.aether.artifact.Artifact prjArtifact = new org.eclipse.aether.artifact.DefaultArtifact(
                                            id.getGroupId(),
                                            id.getArtifactId(),
                                            id.getClassifier(),
                                            null, // extension retrieved via artifactTye
                                            id.getVersion(),
                                            RepositoryUtils.newArtifactType(id.getType(), artifactHandlerManager.getArtifactHandler(id.getType()))
                                    );
                            ArtifactRequest artifactRequest = new ArtifactRequest(prjArtifact, project.getRemoteProjectRepositories(), null);
                            ArtifactResult artifactResult = repoSystem.resolveArtifact(session.getRepositorySession(), artifactRequest);
                            result = RepositoryUtils.toArtifact(artifactResult.getArtifact());
                        } catch (final org.eclipse.aether.resolution.ArtifactResolutionException e) {
                            throw new RuntimeException("Unable to get artifact for " + id.toMvnId(), e);
                        }
                    }
                }
            }
            cache.put(id.toMvnId(), result);
        }

        return result;
    }