blob: e2e261c8cba9ecdd6e8b11d71b0accc24e935da1 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2014 Bachmann electronic GmbH and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Bachmann electronic GmbH - initial API and implementation
*******************************************************************************/
package org.eclipse.tycho.extras.docbundle;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;
import org.apache.maven.artifact.Artifact;
import org.apache.maven.artifact.resolver.ArtifactResolutionException;
import org.apache.maven.artifact.resolver.ArtifactResolutionRequest;
import org.apache.maven.artifact.resolver.ArtifactResolutionResult;
import org.apache.maven.artifact.resolver.ResolutionErrorHandler;
import org.apache.maven.execution.MavenSession;
import org.apache.maven.model.Dependency;
import org.apache.maven.plugin.LegacySupport;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.project.MavenProject;
import org.apache.maven.repository.RepositorySystem;
import org.codehaus.plexus.component.annotations.Component;
import org.codehaus.plexus.component.annotations.Requirement;
@Component(role = DocletArtifactsResolver.class)
public class DocletArtifactsResolver {
@Requirement
private RepositorySystem repositorySystem;
@Requirement
private ResolutionErrorHandler resolutionErrorHandler;
@Requirement
private LegacySupport legacySupport;
public DocletArtifactsResolver() {
// needed for plexus
}
DocletArtifactsResolver(RepositorySystem repositorySystem, ResolutionErrorHandler resolutionErrorHandler,
LegacySupport legacySupport) {
this.repositorySystem = repositorySystem;
this.resolutionErrorHandler = resolutionErrorHandler;
this.legacySupport = legacySupport;
}
/**
* Resolves the dependencies and returns a list of paths to the dependency jar files.
*
* @param dependencies
* the Dependencies to be resolved
* @return the paths to the jar files
* @throws MojoExecutionException
* if one of the specified depenencies could not be resolved
*/
public Set<String> resolveArtifacts(List<Dependency> dependencies) throws MojoExecutionException {
Set<String> files = new LinkedHashSet<>();
if (dependencies == null || dependencies.isEmpty()) {
return files;
}
MavenSession session = legacySupport.getSession();
MavenProject project = session.getCurrentProject();
for (Dependency dependency : dependencies) {
Artifact artifact = repositorySystem.createDependencyArtifact(dependency);
ArtifactResolutionRequest request = new ArtifactResolutionRequest();
request.setArtifact(artifact);
request.setResolveRoot(true).setResolveTransitively(true);
request.setLocalRepository(session.getLocalRepository());
request.setRemoteRepositories(project.getPluginArtifactRepositories());
request.setOffline(session.isOffline());
request.setForceUpdate(session.getRequest().isUpdateSnapshots());
ArtifactResolutionResult result = repositorySystem.resolve(request);
try {
resolutionErrorHandler.throwErrors(request, result);
} catch (ArtifactResolutionException e) {
throw new MojoExecutionException("Failed to resolve doclet artifact " + dependency.getManagementKey(),
e);
}
for (Artifact resolvedArtifact : result.getArtifacts()) {
files.add(resolvedArtifact.getFile().getAbsolutePath());
}
}
return files;
}
}