org.wisdom.maven.utils.DependencyFinder Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of wisdom-maven-plugin Show documentation
Show all versions of wisdom-maven-plugin Show documentation
The Maven Wisdom Plugin allows building applications for Wisdom.
/*
* #%L
* Wisdom-Framework
* %%
* Copyright (C) 2013 - 2014 Wisdom Framework
* %%
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* #L%
*/
package org.wisdom.maven.utils;
import com.google.common.base.Preconditions;
import org.apache.maven.artifact.Artifact;
import org.apache.maven.plugin.MojoExecutionException;
import org.eclipse.aether.artifact.DefaultArtifact;
import org.eclipse.aether.resolution.ArtifactRequest;
import org.eclipse.aether.resolution.ArtifactResolutionException;
import org.eclipse.aether.resolution.ArtifactResult;
import org.wisdom.maven.mojos.AbstractWisdomMojo;
import java.io.File;
/**
* Class responsible for finding dependency files in projects and plugins dependency.
*/
public final class DependencyFinder {
private DependencyFinder() {
// Avoid direct instantiation.
}
/**
* Gets the file of the dependency with the given artifact id from the plugin dependencies (i.e. from the
* dependencies of the wisdom-maven-plugin itself, and not from the current 'under-build' project).
*
* @param mojo the mojo, cannot be {@code null}
* @param artifactId the name of the artifact to find, cannot be {@code null}
* @param type the extension of the artifact to find, should not be {@code null}
* @return the artifact file, {@code null} if not found
*/
public static File getArtifactFileFromPluginDependencies(AbstractWisdomMojo mojo, String artifactId, String type) {
Preconditions.checkNotNull(mojo);
Preconditions.checkNotNull(artifactId);
Preconditions.checkNotNull(type);
for (Artifact artifact : mojo.pluginDependencies) {
if (artifact.getArtifactId().equals(artifactId) && artifact.getType().equals(type)) {
return artifact.getFile();
}
}
return null;
}
/**
* Gets the file of the dependency with the given artifact id from the project dependencies.
*
* @param mojo the mojo
* @param artifactId the name of the artifact to find
* @param type the extension of the artifact to find
* @return the artifact file, {@code null} if not found
*/
public static File getArtifactFileFromProjectDependencies(AbstractWisdomMojo mojo, String artifactId,
String type) {
Preconditions.checkNotNull(mojo);
Preconditions.checkNotNull(artifactId);
Preconditions.checkNotNull(type);
// Get artifacts also resolve transitive dependencies.
for (Artifact artifact : mojo.project.getArtifacts()) {
if (artifact.getArtifactId().equals(artifactId) && artifact.getType().equals(type)) {
return artifact.getFile();
}
}
return null;
}
/**
* Gets the file of the dependency with the given artifact id from the project dependencies and if not found from
* the plugin dependencies. This method also check the extension.
*
* @param mojo the mojo
* @param artifactId the name of the artifact to find
* @param type the extension of the artifact to find
* @return the artifact file, null if not found
*/
public static File getArtifactFile(AbstractWisdomMojo mojo, String artifactId, String type) {
File file = getArtifactFileFromProjectDependencies(mojo, artifactId, type);
if (file == null) {
file = getArtifactFileFromPluginDependencies(mojo, artifactId, type);
}
return file;
}
/**
* Resolves the specified artifact (using its GAV, classifier and packaging).
*
* @param mojo the mojo
* @param groupId the groupId of the artifact to resolve
* @param artifactId the artifactId of the artifact to resolve
* @param version the version
* @param type the type
* @param classifier the classifier
* @return the artifact's file if it can be revolved. The file is located in the local maven repository.
* @throws MojoExecutionException if the artifact cannot be resolved
*/
public static File resolve(AbstractWisdomMojo mojo, String groupId, String artifactId, String version,
String type, String classifier) throws MojoExecutionException {
ArtifactRequest request = new ArtifactRequest();
request.setArtifact(
new DefaultArtifact(groupId, artifactId, classifier, type, version));
request.setRepositories(mojo.remoteRepos);
mojo.getLog().info("Resolving artifact " + artifactId +
" from " + mojo.remoteRepos);
ArtifactResult result;
try {
result = mojo.repoSystem.resolveArtifact(mojo.repoSession, request);
} catch (ArtifactResolutionException e) {
mojo.getLog().error("Cannot resolve " + groupId + ":" + artifactId + ":" + version + ":" + type);
throw new MojoExecutionException(e.getMessage(), e);
}
mojo.getLog().info("Resolved artifact " + artifactId + " to " +
result.getArtifact().getFile() + " from "
+ result.getRepository());
return result.getArtifact().getFile();
}
/**
* Resolves the specified artifact (using the : separated syntax).
*
* @param mojo the mojo
* @param coords the coordinates ot the artifact to resolve using the : separated syntax -
* {@code :[:[:]]:}, must not be {@code null}
* @return the artifact's file if it can be revolved. The file is located in the local maven repository.
* @throws MojoExecutionException if the artifact cannot be resolved
*/
public static File resolve(AbstractWisdomMojo mojo, String coords) throws MojoExecutionException {
ArtifactRequest request = new ArtifactRequest();
request.setArtifact(
new DefaultArtifact(coords));
request.setRepositories(mojo.remoteRepos);
mojo.getLog().info("Resolving artifact " + coords +
" from " + mojo.remoteRepos);
ArtifactResult result;
try {
result = mojo.repoSystem.resolveArtifact(mojo.repoSession, request);
} catch (ArtifactResolutionException e) {
mojo.getLog().error("Cannot resolve " + coords);
throw new MojoExecutionException(e.getMessage(), e);
}
mojo.getLog().info("Resolved artifact " + coords + " to " +
result.getArtifact().getFile() + " from "
+ result.getRepository());
return result.getArtifact().getFile();
}
}