org.apache.maven.plugin.dependency.AbstractDependencyMojo Maven / Gradle / Ivy
package org.apache.maven.plugin.dependency;
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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.
*/
import java.io.File;
import java.io.IOException;
import java.lang.reflect.Field;
import java.util.List;
import org.apache.maven.artifact.metadata.ArtifactMetadataSource;
import org.apache.maven.artifact.resolver.ArtifactCollector;
import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.dependency.utils.SilentLog;
import org.apache.maven.plugin.logging.Log;
import org.apache.maven.project.MavenProject;
import org.codehaus.plexus.archiver.ArchiverException;
import org.codehaus.plexus.archiver.UnArchiver;
import org.codehaus.plexus.archiver.manager.ArchiverManager;
import org.codehaus.plexus.archiver.manager.NoSuchArchiverException;
import org.codehaus.plexus.util.FileUtils;
import org.codehaus.plexus.util.ReflectionUtils;
/**
* @author brianf
*
*/
public abstract class AbstractDependencyMojo
extends AbstractMojo
{
/**
* Used to look up Artifacts in the remote repository.
*
* @parameter expression="${component.org.apache.maven.artifact.factory.ArtifactFactory}"
* @required
* @readonly
*/
protected org.apache.maven.artifact.factory.ArtifactFactory factory;
/**
* Used to look up Artifacts in the remote repository.
*
* @parameter expression="${component.org.apache.maven.artifact.resolver.ArtifactResolver}"
* @required
* @readonly
*/
protected org.apache.maven.artifact.resolver.ArtifactResolver resolver;
/**
* Artifact collector, needed to resolve dependencies.
*
* @component role="org.apache.maven.artifact.resolver.ArtifactCollector"
* @required
* @readonly
*/
protected ArtifactCollector artifactCollector;
/**
* @component role="org.apache.maven.artifact.metadata.ArtifactMetadataSource"
* hint="maven"
* @required
* @readonly
*/
protected ArtifactMetadataSource artifactMetadataSource;
/**
* Location of the local repository.
*
* @parameter expression="${localRepository}"
* @readonly
* @required
*/
protected org.apache.maven.artifact.repository.ArtifactRepository local;
/**
* List of Remote Repositories used by the resolver
*
* @parameter expression="${project.remoteArtifactRepositories}"
* @readonly
* @required
*/
protected java.util.List remoteRepos;
/**
* To look up Archiver/UnArchiver implementations
*
* @parameter expression="${component.org.codehaus.plexus.archiver.manager.ArchiverManager}"
* @required
* @readonly
*/
protected ArchiverManager archiverManager;
/**
* POM
*
* @parameter expression="${project}"
* @readonly
* @required
*/
protected MavenProject project;
/**
* Contains the full list of projects in the reactor.
*
* @parameter expression="${reactorProjects}"
* @required
* @readonly
*/
protected List reactorProjects;
/**
* If the plugin should be silent.
*
* @optional
* @since 2.0
* @parameter expression="${silent}" default-value="false"
*/
public boolean silent;
/**
* Output absolute filename for resolved artifacts
*
* @optional
* @since 2.0
* @parameter expression="${outputAbsoluteArtifactFilename}"
* default-value="false"
*/
protected boolean outputAbsoluteArtifactFilename;
private Log log;
/**
* @return Returns the log.
*/
public Log getLog()
{
if ( silent )
{
log = new SilentLog();
}
else
{
log = super.getLog();
}
return this.log;
}
/**
* @return Returns the archiverManager.
*/
public ArchiverManager getArchiverManager()
{
return this.archiverManager;
}
/**
* Does the actual copy of the file and logging.
*
* @param artifact
* represents the file to copy.
* @param destFile
* file name of destination file.
*
* @throws MojoExecutionException
* with a message if an error occurs.
*/
protected void copyFile( File artifact, File destFile )
throws MojoExecutionException
{
Log theLog = this.getLog();
try
{
theLog.info( "Copying "
+ ( this.outputAbsoluteArtifactFilename ? artifact.getAbsolutePath() : artifact.getName() ) + " to "
+ destFile );
FileUtils.copyFile( artifact, destFile );
}
catch ( Exception e )
{
throw new MojoExecutionException( "Error copying artifact from " + artifact + " to " + destFile, e );
}
}
/**
* Unpacks the archive file.
*
* @param file
* File to be unpacked.
* @param location
* Location where to put the unpacked files.
*/
protected void unpack( File file, File location )
throws MojoExecutionException
{
try
{
location.mkdirs();
UnArchiver unArchiver;
unArchiver = archiverManager.getUnArchiver( file );
unArchiver.setSourceFile( file );
unArchiver.setDestDirectory( location );
if ( this.silent )
{
silenceUnarchiver( unArchiver );
}
unArchiver.extract();
}
catch ( NoSuchArchiverException e )
{
throw new MojoExecutionException( "Unknown archiver type", e );
}
catch ( IOException e )
{
e.printStackTrace();
throw new MojoExecutionException( "Error unpacking file: "
+ ( this.outputAbsoluteArtifactFilename ? file.getAbsolutePath() : file.getName() ) + " to: "
+ location + "\r\n" + e.toString(), e );
}
catch ( ArchiverException e )
{
e.printStackTrace();
throw new MojoExecutionException( "Error unpacking file: " + file + " to: " + location + "\r\n"
+ e.toString(), e );
}
}
private void silenceUnarchiver( UnArchiver unArchiver )
{
// dangerous but handle any errors. It's the only way to silence the
// unArchiver.
try
{
Field field = ReflectionUtils.getFieldByNameIncludingSuperclasses( "logger", unArchiver.getClass() );
field.setAccessible( true );
field.set( unArchiver, this.getLog() );
}
catch ( Exception e )
{
// was a nice try. Don't bother logging because the log is silent.
}
}
/**
* @return Returns the factory.
*/
public org.apache.maven.artifact.factory.ArtifactFactory getFactory()
{
return this.factory;
}
/**
* @param factory
* The factory to set.
*/
public void setFactory( org.apache.maven.artifact.factory.ArtifactFactory factory )
{
this.factory = factory;
}
/**
* @return Returns the project.
*/
public MavenProject getProject()
{
return this.project;
}
/**
* @return Returns the local.
*/
public org.apache.maven.artifact.repository.ArtifactRepository getLocal()
{
return this.local;
}
/**
* @param local
* The local to set.
*/
public void setLocal( org.apache.maven.artifact.repository.ArtifactRepository local )
{
this.local = local;
}
/**
* @return Returns the remoteRepos.
*/
public java.util.List getRemoteRepos()
{
return this.remoteRepos;
}
/**
* @param remoteRepos
* The remoteRepos to set.
*/
public void setRemoteRepos( java.util.List remoteRepos )
{
this.remoteRepos = remoteRepos;
}
/**
* @return Returns the resolver.
*/
public org.apache.maven.artifact.resolver.ArtifactResolver getResolver()
{
return this.resolver;
}
/**
* @param resolver
* The resolver to set.
*/
public void setResolver( org.apache.maven.artifact.resolver.ArtifactResolver resolver )
{
this.resolver = resolver;
}
/**
* @param archiverManager
* The archiverManager to set.
*/
public void setArchiverManager( ArchiverManager archiverManager )
{
this.archiverManager = archiverManager;
}
/**
* @return Returns the artifactCollector.
*/
public ArtifactCollector getArtifactCollector()
{
return this.artifactCollector;
}
/**
* @param theArtifactCollector
* The artifactCollector to set.
*/
public void setArtifactCollector( ArtifactCollector theArtifactCollector )
{
this.artifactCollector = theArtifactCollector;
}
/**
* @return Returns the artifactMetadataSource.
*/
public ArtifactMetadataSource getArtifactMetadataSource()
{
return this.artifactMetadataSource;
}
/**
* @param theArtifactMetadataSource
* The artifactMetadataSource to set.
*/
public void setArtifactMetadataSource( ArtifactMetadataSource theArtifactMetadataSource )
{
this.artifactMetadataSource = theArtifactMetadataSource;
}
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy