Java tutorial
/******************************************************************************* * 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<String>(); 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; } }