mirror of https://github.com/apache/maven.git
refactor maven-artifact: first pass, reduce the usage of setPath()
git-svn-id: https://svn.apache.org/repos/asf/maven/components/trunk@163681 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
d0e15a1f37
commit
ee15019eb8
|
@ -39,6 +39,13 @@ public interface Artifact
|
||||||
|
|
||||||
String getVersion();
|
String getVersion();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the scope of the artifact. If the artifact is a standalone rather than a dependency, it's scope will be
|
||||||
|
* <code>null</code>. The scope may not be the same as it was declared on the original dependency, as this is the
|
||||||
|
* result of combining it with the main project scope.
|
||||||
|
*
|
||||||
|
* @return the scope
|
||||||
|
*/
|
||||||
String getScope();
|
String getScope();
|
||||||
|
|
||||||
String getType();
|
String getType();
|
||||||
|
@ -48,19 +55,9 @@ public interface Artifact
|
||||||
// only providing this since classifier is *very* optional...
|
// only providing this since classifier is *very* optional...
|
||||||
boolean hasClassifier();
|
boolean hasClassifier();
|
||||||
|
|
||||||
// ----------------------------------------------------------------------
|
|
||||||
|
|
||||||
void setPath( String path );
|
|
||||||
|
|
||||||
String getPath();
|
|
||||||
|
|
||||||
File getFile();
|
File getFile();
|
||||||
|
|
||||||
boolean exists();
|
void setFile( File destination );
|
||||||
|
|
||||||
// ----------------------------------------------------------------------
|
|
||||||
|
|
||||||
File getChecksumFile();
|
|
||||||
|
|
||||||
// ----------------------------------------------------------------------
|
// ----------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
|
@ -27,15 +27,11 @@ import java.util.List;
|
||||||
/**
|
/**
|
||||||
* @author <a href="mailto:jason@maven.org">Jason van Zyl </a>
|
* @author <a href="mailto:jason@maven.org">Jason van Zyl </a>
|
||||||
* @version $Id$
|
* @version $Id$
|
||||||
|
* @todo this should possibly be replaced by type handler
|
||||||
*/
|
*/
|
||||||
public class DefaultArtifact
|
public class DefaultArtifact
|
||||||
implements Artifact
|
implements Artifact
|
||||||
{
|
{
|
||||||
|
|
||||||
// ----------------------------------------------------------------------
|
|
||||||
// These are the only things i need to specify
|
|
||||||
// ----------------------------------------------------------------------
|
|
||||||
|
|
||||||
private final String groupId;
|
private final String groupId;
|
||||||
|
|
||||||
private final String artifactId;
|
private final String artifactId;
|
||||||
|
@ -48,12 +44,11 @@ public class DefaultArtifact
|
||||||
|
|
||||||
private final String scope;
|
private final String scope;
|
||||||
|
|
||||||
private String path;
|
|
||||||
|
|
||||||
private List metadataList;
|
private List metadataList;
|
||||||
|
|
||||||
|
private File file;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @todo this should be replaced by type handler
|
|
||||||
* !!! WARNING !!! Never put <classifier/> in the POM. It is for mojo use
|
* !!! WARNING !!! Never put <classifier/> in the POM. It is for mojo use
|
||||||
* only. Classifier is for specifying derived artifacts, like ejb-client.
|
* only. Classifier is for specifying derived artifacts, like ejb-client.
|
||||||
*/
|
*/
|
||||||
|
@ -124,33 +119,18 @@ public class DefaultArtifact
|
||||||
return type;
|
return type;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------------------
|
public void setFile( File file )
|
||||||
//
|
|
||||||
// ----------------------------------------------------------------------
|
|
||||||
|
|
||||||
public String getPath()
|
|
||||||
{
|
{
|
||||||
return path;
|
this.file = file;
|
||||||
}
|
|
||||||
|
|
||||||
public void setPath( String path )
|
|
||||||
{
|
|
||||||
this.path = path;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean exists()
|
|
||||||
{
|
|
||||||
return getFile().exists();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public File getFile()
|
public File getFile()
|
||||||
{
|
{
|
||||||
return new File( getPath() );
|
if ( file == null )
|
||||||
}
|
|
||||||
|
|
||||||
public File getChecksumFile()
|
|
||||||
{
|
{
|
||||||
return new File( getFile().getAbsolutePath() + ".md5" );
|
throw new IllegalStateException( "Artifact's local file has not yet been assigned - not resolved" );
|
||||||
|
}
|
||||||
|
return file;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------------------
|
// ----------------------------------------------------------------------
|
||||||
|
|
|
@ -56,7 +56,7 @@ public class DefaultArtifactDeployer
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
wagonManager.put( source, artifact, deploymentRepository );
|
wagonManager.putArtifact( source, artifact, deploymentRepository );
|
||||||
}
|
}
|
||||||
catch ( Exception e )
|
catch ( Exception e )
|
||||||
{
|
{
|
||||||
|
|
|
@ -57,16 +57,18 @@ public class DefaultArtifactInstaller
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
artifact.setPath( artifactHandlerManager.getLocalRepositoryArtifactPath( artifact, localRepository ) );
|
String localPath = artifactHandlerManager.getLocalRepositoryArtifactPath( artifact, localRepository );
|
||||||
|
|
||||||
if ( !artifact.getFile().getParentFile().exists() )
|
getLogger().info( "Installing " + source.getPath() + " to " + localPath );
|
||||||
|
|
||||||
|
// TODO: use a file: wagon and the wagon manager?
|
||||||
|
File destination = new File( localPath );
|
||||||
|
if ( !destination.getParentFile().exists() )
|
||||||
{
|
{
|
||||||
artifact.getFile().getParentFile().mkdirs();
|
destination.getParentFile().mkdirs();
|
||||||
}
|
}
|
||||||
|
|
||||||
getLogger().info( "Installing " + source.getPath() + " to " + artifact.getPath() );
|
FileUtils.copyFile( source, destination );
|
||||||
|
|
||||||
FileUtils.copyFile( source, artifact.getFile() );
|
|
||||||
|
|
||||||
// must be after the artifact is installed
|
// must be after the artifact is installed
|
||||||
for ( Iterator i = artifact.getMetadataList().iterator(); i.hasNext(); )
|
for ( Iterator i = artifact.getMetadataList().iterator(); i.hasNext(); )
|
||||||
|
|
|
@ -18,7 +18,9 @@ package org.apache.maven.artifact.manager;
|
||||||
|
|
||||||
import org.apache.maven.artifact.Artifact;
|
import org.apache.maven.artifact.Artifact;
|
||||||
import org.apache.maven.artifact.handler.manager.ArtifactHandlerManager;
|
import org.apache.maven.artifact.handler.manager.ArtifactHandlerManager;
|
||||||
|
import org.apache.maven.artifact.metadata.ArtifactMetadata;
|
||||||
import org.apache.maven.artifact.repository.ArtifactRepository;
|
import org.apache.maven.artifact.repository.ArtifactRepository;
|
||||||
|
import org.apache.maven.artifact.repository.layout.ArtifactPathFormatException;
|
||||||
import org.apache.maven.wagon.ConnectionException;
|
import org.apache.maven.wagon.ConnectionException;
|
||||||
import org.apache.maven.wagon.ResourceDoesNotExistException;
|
import org.apache.maven.wagon.ResourceDoesNotExistException;
|
||||||
import org.apache.maven.wagon.TransferFailedException;
|
import org.apache.maven.wagon.TransferFailedException;
|
||||||
|
@ -82,7 +84,7 @@ public class DefaultWagonManager
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: don't throw exception
|
// TODO: don't throw exception
|
||||||
public void put( File source, Artifact artifact, ArtifactRepository repository )
|
public void putArtifact( File source, Artifact artifact, ArtifactRepository repository )
|
||||||
throws Exception
|
throws Exception
|
||||||
{
|
{
|
||||||
Wagon wagon = getWagon( repository.getProtocol() );
|
Wagon wagon = getWagon( repository.getProtocol() );
|
||||||
|
@ -96,50 +98,82 @@ public class DefaultWagonManager
|
||||||
releaseWagon( wagon );
|
releaseWagon( wagon );
|
||||||
}
|
}
|
||||||
|
|
||||||
public void get( Artifact artifact, List remoteRepositories, ArtifactRepository localRepository )
|
public void getArtifact( Artifact artifact, List remoteRepositories, File destination )
|
||||||
throws TransferFailedException
|
throws TransferFailedException
|
||||||
{
|
{
|
||||||
get( artifact, artifact.getFile(), remoteRepositories );
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Look in a set of repositories and return when the first valid artifact is
|
|
||||||
* found.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param artifact
|
|
||||||
* @param destination
|
|
||||||
* @throws TransferFailedException
|
|
||||||
* @todo I want to somehow plug artifact validators at such low level.
|
|
||||||
* Simply if artifact was downloaded but it was rejected by
|
|
||||||
* validator(s) the loop should continue. Some of the validators can
|
|
||||||
* be feeded directly using events so number of i/o operation could be
|
|
||||||
* limited. <p/>If we won't plug validation process here the question
|
|
||||||
* is what we can do afterwards? We don't know from which
|
|
||||||
* ArtifactRepository artifact was fetched and where we should
|
|
||||||
* restart. We should be also fetching md5 sums and such from the same
|
|
||||||
* exact directory then artifacts <p/>
|
|
||||||
* @todo probably all exceptions should just be logged and continue
|
|
||||||
* @todo is the exception for warnings logged at debug level correct?
|
|
||||||
*/
|
|
||||||
public void get( Artifact artifact, File destination, List repositories )
|
|
||||||
throws TransferFailedException
|
|
||||||
{
|
|
||||||
File temp = null;
|
|
||||||
|
|
||||||
// TODO [BP]: do this handling in Wagon itself
|
|
||||||
temp = new File( destination + ".tmp" );
|
|
||||||
temp.deleteOnExit();
|
|
||||||
|
|
||||||
// TODO [BP]: The exception handling here needs some work
|
// TODO [BP]: The exception handling here needs some work
|
||||||
for ( Iterator iter = repositories.iterator(); iter.hasNext(); )
|
boolean successful = false;
|
||||||
|
for ( Iterator iter = remoteRepositories.iterator(); iter.hasNext() && !successful; )
|
||||||
{
|
{
|
||||||
ArtifactRepository repository = (ArtifactRepository) iter.next();
|
ArtifactRepository repository = (ArtifactRepository) iter.next();
|
||||||
|
|
||||||
|
// TODO: should we avoid doing the transforms on this every time, and instead transform outside the loop?
|
||||||
|
String remotePath = null;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
Wagon wagon = getWagon( repository.getProtocol() );
|
remotePath = artifactHandlerManager.getRemoteRepositoryArtifactPath( artifact, repository );
|
||||||
|
}
|
||||||
|
catch ( ArtifactPathFormatException e )
|
||||||
|
{
|
||||||
|
// TODO may be more appropriate to propogate the APFE
|
||||||
|
throw new TransferFailedException( "Failed to determine path for artifact", e );
|
||||||
|
}
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
getRemoteFile( repository, destination, remotePath );
|
||||||
|
|
||||||
|
successful = true;
|
||||||
|
}
|
||||||
|
catch ( ResourceDoesNotExistException e )
|
||||||
|
{
|
||||||
|
// This one we will eat when looking through remote repositories
|
||||||
|
// because we want to cycle through them all before squawking.
|
||||||
|
|
||||||
|
getLogger().warn( "Unable to get resource from repository " + repository.getUrl() );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( !successful )
|
||||||
|
{
|
||||||
|
throw new TransferFailedException( "Unable to download the artifact from any repository" );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void getMetadata( ArtifactMetadata metadata, ArtifactRepository remoteRepository,
|
||||||
|
ArtifactRepository localRepository )
|
||||||
|
throws TransferFailedException, ResourceDoesNotExistException
|
||||||
|
{
|
||||||
|
String remotePath;
|
||||||
|
String localPath;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
remotePath = remoteRepository.pathOfMetadata( metadata );
|
||||||
|
localPath = localRepository.pathOfMetadata( metadata );
|
||||||
|
}
|
||||||
|
catch ( ArtifactPathFormatException e )
|
||||||
|
{
|
||||||
|
// TODO may be more appropriate to propogate APFE
|
||||||
|
throw new TransferFailedException( "Failed to determine path for artifact", e );
|
||||||
|
}
|
||||||
|
|
||||||
|
File metadataFile = new File( localRepository.getBasedir(), localPath );
|
||||||
|
getRemoteFile( remoteRepository, metadataFile, remotePath );
|
||||||
|
}
|
||||||
|
|
||||||
|
private void getRemoteFile( ArtifactRepository repository, File destination, String remotePath )
|
||||||
|
throws TransferFailedException, ResourceDoesNotExistException
|
||||||
|
{
|
||||||
|
Wagon wagon;
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
wagon = getWagon( repository.getProtocol() );
|
||||||
|
}
|
||||||
|
catch ( UnsupportedProtocolException e )
|
||||||
|
{
|
||||||
|
throw new TransferFailedException( "Unsupported Protocol: ", e );
|
||||||
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------------------
|
// ----------------------------------------------------------------------
|
||||||
// These can certainly be configurable ... registering listeners
|
// These can certainly be configurable ... registering listeners
|
||||||
|
@ -156,29 +190,23 @@ public class DefaultWagonManager
|
||||||
wagon.addTransferListener( downloadMonitor );
|
wagon.addTransferListener( downloadMonitor );
|
||||||
}
|
}
|
||||||
|
|
||||||
wagon.connect( repository, getProxy( repository.getProtocol() ) );
|
// TODO [BP]: do this handling in Wagon itself
|
||||||
|
if ( !destination.getParentFile().exists() )
|
||||||
|
{
|
||||||
|
destination.getParentFile().mkdirs();
|
||||||
|
}
|
||||||
|
|
||||||
// TODO: should we avoid doing the transforms on this every time, and instead transform outside the loop?
|
File temp = new File( destination + ".tmp" );
|
||||||
String remotePath = artifactHandlerManager.getRemoteRepositoryArtifactPath( artifact, repository );
|
temp.deleteOnExit();
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
wagon.connect( repository, getProxy( repository.getProtocol() ) );
|
||||||
|
|
||||||
wagon.get( remotePath, temp );
|
wagon.get( remotePath, temp );
|
||||||
|
|
||||||
// TODO [BP]: put all disconnects in finally
|
// TODO [BP]: put all disconnects in finally
|
||||||
wagon.disconnect();
|
wagon.disconnect();
|
||||||
|
|
||||||
releaseWagon( wagon );
|
|
||||||
|
|
||||||
}
|
|
||||||
catch ( ResourceDoesNotExistException e )
|
|
||||||
{
|
|
||||||
// This one we will eat when looking through remote repositories
|
|
||||||
// because we want to cycle through them all before squawking.
|
|
||||||
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
catch ( UnsupportedProtocolException e )
|
|
||||||
{
|
|
||||||
throw new TransferFailedException( "Unsupported Protocol: ", e );
|
|
||||||
}
|
}
|
||||||
catch ( ConnectionException e )
|
catch ( ConnectionException e )
|
||||||
{
|
{
|
||||||
|
@ -192,22 +220,16 @@ public class DefaultWagonManager
|
||||||
{
|
{
|
||||||
throw new TransferFailedException( "Authorization failed: ", e );
|
throw new TransferFailedException( "Authorization failed: ", e );
|
||||||
}
|
}
|
||||||
catch ( TransferFailedException e )
|
finally
|
||||||
{
|
{
|
||||||
getLogger().warn( "Failure getting artifact from repository '" + repository + "': " + e );
|
try
|
||||||
|
{
|
||||||
getLogger().debug( "Stack trace", e );
|
releaseWagon( wagon );
|
||||||
|
|
||||||
continue;
|
|
||||||
}
|
}
|
||||||
catch ( Exception e )
|
catch ( Exception e )
|
||||||
{
|
{
|
||||||
throw new TransferFailedException( "Release of wagon failed: ", e );
|
throw new TransferFailedException( "Release of wagon failed: ", e );
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( !destination.getParentFile().exists() )
|
|
||||||
{
|
|
||||||
destination.getParentFile().mkdirs();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// The temporary file is named destination + ".tmp" and is done this
|
// The temporary file is named destination + ".tmp" and is done this
|
||||||
|
@ -233,11 +255,6 @@ public class DefaultWagonManager
|
||||||
throw new TransferFailedException( "Error copying temporary file to the final destination: ", e );
|
throw new TransferFailedException( "Error copying temporary file to the final destination: ", e );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
throw new TransferFailedException( "Unable to download the artifact from any repository" );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private ProxyInfo getProxy( String protocol )
|
private ProxyInfo getProxy( String protocol )
|
||||||
|
|
|
@ -17,7 +17,9 @@ package org.apache.maven.artifact.manager;
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import org.apache.maven.artifact.Artifact;
|
import org.apache.maven.artifact.Artifact;
|
||||||
|
import org.apache.maven.artifact.metadata.ArtifactMetadata;
|
||||||
import org.apache.maven.artifact.repository.ArtifactRepository;
|
import org.apache.maven.artifact.repository.ArtifactRepository;
|
||||||
|
import org.apache.maven.wagon.ResourceDoesNotExistException;
|
||||||
import org.apache.maven.wagon.TransferFailedException;
|
import org.apache.maven.wagon.TransferFailedException;
|
||||||
import org.apache.maven.wagon.UnsupportedProtocolException;
|
import org.apache.maven.wagon.UnsupportedProtocolException;
|
||||||
import org.apache.maven.wagon.Wagon;
|
import org.apache.maven.wagon.Wagon;
|
||||||
|
@ -41,13 +43,17 @@ public interface WagonManager
|
||||||
void releaseWagon( Wagon wagon )
|
void releaseWagon( Wagon wagon )
|
||||||
throws Exception;
|
throws Exception;
|
||||||
|
|
||||||
void get( Artifact artifact, List remoteRepositories, ArtifactRepository localRepository )
|
void getArtifact( Artifact artifact, List remoteRepositories, File destination )
|
||||||
throws TransferFailedException;
|
throws TransferFailedException;
|
||||||
|
|
||||||
// TODO: don't throw exception
|
// TODO: don't throw exception
|
||||||
void put( File source, Artifact artifact, ArtifactRepository deploymentRepository )
|
void putArtifact( File source, Artifact artifact, ArtifactRepository deploymentRepository )
|
||||||
throws Exception;
|
throws Exception;
|
||||||
|
|
||||||
|
void getMetadata( ArtifactMetadata metadata, ArtifactRepository remoteRepository,
|
||||||
|
ArtifactRepository localRepository )
|
||||||
|
throws TransferFailedException, ResourceDoesNotExistException;
|
||||||
|
|
||||||
void setProxy( String protocol, String host, int port, String username, String password, String nonProxyHosts );
|
void setProxy( String protocol, String host, int port, String username, String password, String nonProxyHosts );
|
||||||
|
|
||||||
void setDownloadMonitor( TransferListener downloadMonitor );
|
void setDownloadMonitor( TransferListener downloadMonitor );
|
||||||
|
|
|
@ -19,6 +19,7 @@ package org.apache.maven.artifact.metadata;
|
||||||
import org.apache.maven.artifact.Artifact;
|
import org.apache.maven.artifact.Artifact;
|
||||||
import org.apache.maven.artifact.repository.ArtifactRepository;
|
import org.apache.maven.artifact.repository.ArtifactRepository;
|
||||||
import org.apache.maven.artifact.repository.layout.ArtifactPathFormatException;
|
import org.apache.maven.artifact.repository.layout.ArtifactPathFormatException;
|
||||||
|
import org.apache.maven.artifact.resolver.ArtifactResolutionException;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
||||||
|
@ -40,6 +41,15 @@ public interface ArtifactMetadata
|
||||||
void storeInLocalRepository( ArtifactRepository localRepository )
|
void storeInLocalRepository( ArtifactRepository localRepository )
|
||||||
throws IOException, ArtifactPathFormatException;
|
throws IOException, ArtifactPathFormatException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieve the metadata from the remote repository into the local repository.
|
||||||
|
*
|
||||||
|
* @param remoteRepository the remote repository
|
||||||
|
* @param localRepository the local repository
|
||||||
|
*/
|
||||||
|
void retrieveFromRemoteRepository( ArtifactRepository remoteRepository, ArtifactRepository localRepository )
|
||||||
|
throws IOException, ArtifactResolutionException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the associated artifact.
|
* Get the associated artifact.
|
||||||
*
|
*
|
||||||
|
|
|
@ -19,6 +19,7 @@ package org.apache.maven.artifact.metadata;
|
||||||
import org.apache.maven.artifact.Artifact;
|
import org.apache.maven.artifact.Artifact;
|
||||||
import org.apache.maven.artifact.repository.ArtifactRepository;
|
import org.apache.maven.artifact.repository.ArtifactRepository;
|
||||||
import org.apache.maven.artifact.repository.layout.ArtifactPathFormatException;
|
import org.apache.maven.artifact.repository.layout.ArtifactPathFormatException;
|
||||||
|
import org.apache.maven.artifact.resolver.ArtifactResolutionException;
|
||||||
import org.codehaus.plexus.util.FileUtils;
|
import org.codehaus.plexus.util.FileUtils;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
@ -46,6 +47,8 @@ public class SnapshotArtifactMetadata
|
||||||
|
|
||||||
private static final TimeZone UTC_TIME_ZONE = TimeZone.getTimeZone( "UTC" );
|
private static final TimeZone UTC_TIME_ZONE = TimeZone.getTimeZone( "UTC" );
|
||||||
|
|
||||||
|
private static final String UTC_TIMESTAMP_PATTERN = "yyyyMMdd.HHmmss";
|
||||||
|
|
||||||
private SnapshotArtifactMetadata( Artifact artifact, String filename )
|
private SnapshotArtifactMetadata( Artifact artifact, String filename )
|
||||||
{
|
{
|
||||||
super( artifact, filename );
|
super( artifact, filename );
|
||||||
|
@ -56,6 +59,11 @@ public class SnapshotArtifactMetadata
|
||||||
return new SnapshotArtifactMetadata( artifact, SNAPSHOT_VERSION_LOCAL_FILE );
|
return new SnapshotArtifactMetadata( artifact, SNAPSHOT_VERSION_LOCAL_FILE );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static ArtifactMetadata createRemoteSnapshotMetadata( Artifact artifact )
|
||||||
|
{
|
||||||
|
return new SnapshotArtifactMetadata( artifact, SNAPSHOT_VERSION_FILE );
|
||||||
|
}
|
||||||
|
|
||||||
public void storeInLocalRepository( ArtifactRepository localRepository )
|
public void storeInLocalRepository( ArtifactRepository localRepository )
|
||||||
throws IOException, ArtifactPathFormatException
|
throws IOException, ArtifactPathFormatException
|
||||||
{
|
{
|
||||||
|
@ -63,6 +71,22 @@ public class SnapshotArtifactMetadata
|
||||||
getTimestamp() + "-" + buildNumber );
|
getTimestamp() + "-" + buildNumber );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void retrieveFromRemoteRepository( ArtifactRepository remoteRepository, ArtifactRepository localRepository )
|
||||||
|
throws IOException, ArtifactResolutionException
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
// TODO: this is getting the artifact - needs to get the version.txt
|
||||||
|
resolver.resolve( artifact, Collections.singletonList( remoteRepository ), localRepository );
|
||||||
|
|
||||||
|
String version = FileUtils.fileRead( artifact.getPath() );
|
||||||
|
|
||||||
|
int index = UTC_TIMESTAMP_PATTERN.length();
|
||||||
|
timestamp = version.substring( 0, index );
|
||||||
|
|
||||||
|
buildNumber = Integer.valueOf( version.substring( index + 1 ) ).intValue();
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
|
||||||
public String getTimestamp()
|
public String getTimestamp()
|
||||||
{
|
{
|
||||||
if ( timestamp == null )
|
if ( timestamp == null )
|
||||||
|
@ -72,9 +96,9 @@ public class SnapshotArtifactMetadata
|
||||||
return timestamp;
|
return timestamp;
|
||||||
}
|
}
|
||||||
|
|
||||||
public DateFormat getUtcDateFormatter()
|
public static DateFormat getUtcDateFormatter()
|
||||||
{
|
{
|
||||||
DateFormat utcDateFormatter = new SimpleDateFormat( "yyyyMMdd.HHmmss" );
|
DateFormat utcDateFormatter = new SimpleDateFormat( UTC_TIMESTAMP_PATTERN );
|
||||||
utcDateFormatter.setTimeZone( UTC_TIME_ZONE );
|
utcDateFormatter.setTimeZone( UTC_TIME_ZONE );
|
||||||
return utcDateFormatter;
|
return utcDateFormatter;
|
||||||
}
|
}
|
||||||
|
|
|
@ -29,6 +29,7 @@ import org.apache.maven.wagon.TransferFailedException;
|
||||||
import org.codehaus.plexus.logging.AbstractLogEnabled;
|
import org.codehaus.plexus.logging.AbstractLogEnabled;
|
||||||
import org.codehaus.plexus.logging.Logger;
|
import org.codehaus.plexus.logging.Logger;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
|
@ -45,6 +46,8 @@ public class DefaultArtifactResolver
|
||||||
extends AbstractLogEnabled
|
extends AbstractLogEnabled
|
||||||
implements ArtifactResolver
|
implements ArtifactResolver
|
||||||
{
|
{
|
||||||
|
private final ArtifactConstructionSupport artifactConstructionSupport = new ArtifactConstructionSupport();
|
||||||
|
|
||||||
// ----------------------------------------------------------------------
|
// ----------------------------------------------------------------------
|
||||||
// Components
|
// Components
|
||||||
// ----------------------------------------------------------------------
|
// ----------------------------------------------------------------------
|
||||||
|
@ -57,15 +60,10 @@ public class DefaultArtifactResolver
|
||||||
// Implementation
|
// Implementation
|
||||||
// ----------------------------------------------------------------------
|
// ----------------------------------------------------------------------
|
||||||
|
|
||||||
private ArtifactConstructionSupport artifactConstructionSupport = new ArtifactConstructionSupport();
|
// TODO: would like to avoid the returning of a new artifact - is it ok to modify the original though?
|
||||||
|
|
||||||
public Artifact resolve( Artifact artifact, List remoteRepositories, ArtifactRepository localRepository )
|
public Artifact resolve( Artifact artifact, List remoteRepositories, ArtifactRepository localRepository )
|
||||||
throws ArtifactResolutionException
|
throws ArtifactResolutionException
|
||||||
{
|
{
|
||||||
// ----------------------------------------------------------------------
|
|
||||||
// Perform any transformation on the artifacts
|
|
||||||
// ----------------------------------------------------------------------
|
|
||||||
|
|
||||||
// ----------------------------------------------------------------------
|
// ----------------------------------------------------------------------
|
||||||
// Check for the existence of the artifact in the specified local
|
// Check for the existence of the artifact in the specified local
|
||||||
// ArtifactRepository. If it is present then simply return as the
|
// ArtifactRepository. If it is present then simply return as the
|
||||||
|
@ -73,41 +71,57 @@ public class DefaultArtifactResolver
|
||||||
// for resolution has been satisfied.
|
// for resolution has been satisfied.
|
||||||
// ----------------------------------------------------------------------
|
// ----------------------------------------------------------------------
|
||||||
|
|
||||||
|
Logger logger = getLogger();
|
||||||
|
logger.debug( "Resolving: " + artifact.getId() + " from:\n" + "{localRepository: " + localRepository + "}\n" +
|
||||||
|
"{remoteRepositories: " + remoteRepositories + "}" );
|
||||||
|
|
||||||
|
String localPath;
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
Logger logger = getLogger();
|
localPath = artifactHandlerManager.getLocalRepositoryArtifactPath( artifact, localRepository );
|
||||||
logger.debug( "Resolving: " + artifact.getId() + " from:\n" + "{localRepository: " + localRepository +
|
|
||||||
"}\n" + "{remoteRepositories: " + remoteRepositories + "}" );
|
|
||||||
|
|
||||||
artifact.setPath( artifactHandlerManager.getLocalRepositoryArtifactPath( artifact, localRepository ) );
|
|
||||||
|
|
||||||
if ( artifact.exists() )
|
|
||||||
{
|
|
||||||
return artifact;
|
|
||||||
}
|
|
||||||
|
|
||||||
wagonManager.get( artifact, remoteRepositories, localRepository );
|
|
||||||
}
|
|
||||||
catch ( TransferFailedException e )
|
|
||||||
{
|
|
||||||
throw new ArtifactResolutionException( artifactNotFound( artifact, remoteRepositories ), e );
|
|
||||||
}
|
}
|
||||||
catch ( ArtifactPathFormatException e )
|
catch ( ArtifactPathFormatException e )
|
||||||
{
|
{
|
||||||
throw new ArtifactResolutionException( "Error resolving artifact: ", e );
|
throw new ArtifactResolutionException( "Error resolving artifact: ", e );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: what if it were a snapshot that was transformed?
|
||||||
|
File destination = new File( localPath );
|
||||||
|
artifact.setFile( destination );
|
||||||
|
|
||||||
|
if ( destination.exists() )
|
||||||
|
{
|
||||||
|
return artifact;
|
||||||
|
}
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
wagonManager.getArtifact( artifact, remoteRepositories, destination );
|
||||||
|
}
|
||||||
|
catch ( TransferFailedException e )
|
||||||
|
{
|
||||||
|
throw new ArtifactResolutionException( artifactNotFound( localPath, remoteRepositories ), e );
|
||||||
|
}
|
||||||
|
|
||||||
return artifact;
|
return artifact;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static final String LS = System.getProperty( "line.separator" );
|
private static final String LS = System.getProperty( "line.separator" );
|
||||||
|
|
||||||
private String artifactNotFound( Artifact artifact, List remoteRepositories )
|
private String artifactNotFound( String path, List remoteRepositories )
|
||||||
{
|
{
|
||||||
StringBuffer sb = new StringBuffer();
|
StringBuffer sb = new StringBuffer();
|
||||||
|
|
||||||
sb.append( "The artifact is not present locally as:" ).append( LS ).append( LS ).append( artifact.getPath() ).append(
|
sb.append( "The artifact is not present locally as:" );
|
||||||
LS ).append( LS ).append( "or in any of the specified remote repositories:" ).append( LS ).append( LS );
|
sb.append( LS );
|
||||||
|
sb.append( LS );
|
||||||
|
sb.append( path );
|
||||||
|
sb.append( LS );
|
||||||
|
sb.append( LS );
|
||||||
|
sb.append( "or in any of the specified remote repositories:" );
|
||||||
|
sb.append( LS );
|
||||||
|
sb.append( LS );
|
||||||
|
|
||||||
for ( Iterator i = remoteRepositories.iterator(); i.hasNext(); )
|
for ( Iterator i = remoteRepositories.iterator(); i.hasNext(); )
|
||||||
{
|
{
|
||||||
|
@ -160,11 +174,19 @@ public class DefaultArtifactResolver
|
||||||
throw new ArtifactResolutionException( "Error transitively resolving artifacts: ", e );
|
throw new ArtifactResolutionException( "Error transitively resolving artifacts: ", e );
|
||||||
}
|
}
|
||||||
|
|
||||||
for ( Iterator i = artifactResolutionResult.getArtifacts().values().iterator(); i.hasNext(); )
|
// TODO: this is unclean, but necessary as long as resolve may return a different artifact
|
||||||
|
Map collectedArtifacts = artifactResolutionResult.getArtifacts();
|
||||||
|
Map resolvedArtifacts = new HashMap( collectedArtifacts.size() );
|
||||||
|
for ( Iterator i = collectedArtifacts.keySet().iterator(); i.hasNext(); )
|
||||||
{
|
{
|
||||||
resolve( (Artifact) i.next(), remoteRepositories, localRepository );
|
Object key = i.next();
|
||||||
|
resolvedArtifacts.put( key, resolve( (Artifact) collectedArtifacts.get( key ), remoteRepositories,
|
||||||
|
localRepository ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
collectedArtifacts.clear();
|
||||||
|
collectedArtifacts.putAll( resolvedArtifacts );
|
||||||
|
|
||||||
return artifactResolutionResult;
|
return artifactResolutionResult;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -242,6 +264,7 @@ public class DefaultArtifactResolver
|
||||||
{
|
{
|
||||||
// TODO: Artifact factory?
|
// TODO: Artifact factory?
|
||||||
// TODO: [jc] Is this a better way to centralize artifact construction here?
|
// TODO: [jc] Is this a better way to centralize artifact construction here?
|
||||||
|
|
||||||
Artifact artifact = artifactConstructionSupport.createArtifact( knownArtifact.getGroupId(),
|
Artifact artifact = artifactConstructionSupport.createArtifact( knownArtifact.getGroupId(),
|
||||||
knownArtifact.getArtifactId(),
|
knownArtifact.getArtifactId(),
|
||||||
knownVersion,
|
knownVersion,
|
||||||
|
@ -294,15 +317,6 @@ public class DefaultArtifactResolver
|
||||||
{
|
{
|
||||||
Artifact artifact = (Artifact) it.next();
|
Artifact artifact = (Artifact) it.next();
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
artifact.setPath( artifactHandlerManager.getLocalRepositoryArtifactPath( artifact, localRepository ) );
|
|
||||||
}
|
|
||||||
catch ( ArtifactPathFormatException e )
|
|
||||||
{
|
|
||||||
throw new TransitiveArtifactResolutionException( "Error collecting artifact: ", e );
|
|
||||||
}
|
|
||||||
|
|
||||||
artifactResult.put( artifact.getId(), artifact );
|
artifactResult.put( artifact.getId(), artifact );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -33,6 +33,7 @@ public interface ArtifactTransformation
|
||||||
* transformation has occured the original artifact is returned.
|
* transformation has occured the original artifact is returned.
|
||||||
*
|
*
|
||||||
* @param artifact Artifact to be transformed.
|
* @param artifact Artifact to be transformed.
|
||||||
|
* @param localRepository the local repository it will be stored in
|
||||||
* @return The transformed Artifact
|
* @return The transformed Artifact
|
||||||
*/
|
*/
|
||||||
Artifact transformLocalArtifact( Artifact artifact, ArtifactRepository localRepository );
|
Artifact transformLocalArtifact( Artifact artifact, ArtifactRepository localRepository );
|
||||||
|
@ -43,6 +44,7 @@ public interface ArtifactTransformation
|
||||||
*
|
*
|
||||||
* @param artifact Artifact to be transformed.
|
* @param artifact Artifact to be transformed.
|
||||||
* @return The transformed Artifact
|
* @return The transformed Artifact
|
||||||
|
* @todo finish doco
|
||||||
*/
|
*/
|
||||||
Artifact transformRemoteArtifact( Artifact artifact, ArtifactRepository remoteRepository );
|
Artifact transformRemoteArtifact( Artifact artifact, ArtifactRepository remoteRepository );
|
||||||
}
|
}
|
|
@ -189,7 +189,7 @@ public class SnapshotTransformation
|
||||||
{
|
{
|
||||||
if ( shouldProcessArtifact( artifact ) )
|
if ( shouldProcessArtifact( artifact ) )
|
||||||
{
|
{
|
||||||
// only store the snapshot-version-local.txt file for POMs as every file has an associated POM
|
// only store the version-local.txt file for POMs as every file has an associated POM
|
||||||
ArtifactMetadata metadata = SnapshotArtifactMetadata.createLocalSnapshotMetadata( artifact );
|
ArtifactMetadata metadata = SnapshotArtifactMetadata.createLocalSnapshotMetadata( artifact );
|
||||||
artifact.addMetadata( metadata );
|
artifact.addMetadata( metadata );
|
||||||
}
|
}
|
||||||
|
@ -200,6 +200,9 @@ public class SnapshotTransformation
|
||||||
{
|
{
|
||||||
if ( shouldProcessArtifact( artifact ) )
|
if ( shouldProcessArtifact( artifact ) )
|
||||||
{
|
{
|
||||||
|
ArtifactMetadata metadata = SnapshotArtifactMetadata.createRemoteSnapshotMetadata( artifact );
|
||||||
|
// wagonManager.getMetadata( metadata, remoteRepository, localRepository );
|
||||||
|
|
||||||
// TODO: implement
|
// TODO: implement
|
||||||
}
|
}
|
||||||
return artifact;
|
return artifact;
|
||||||
|
|
|
@ -70,6 +70,11 @@ public abstract class ArtifactComponentTestCase
|
||||||
return localRepository;
|
return localRepository;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected String getRepositoryLayout()
|
||||||
|
{
|
||||||
|
return "legacy";
|
||||||
|
}
|
||||||
|
|
||||||
protected ArtifactRepository localRepository()
|
protected ArtifactRepository localRepository()
|
||||||
throws Exception
|
throws Exception
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
|
package org.apache.maven.artifact;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright 2001-2004 The Apache Software Foundation.
|
* Copyright 2001-2005 The Apache Software Foundation.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
|
@ -14,19 +16,6 @@
|
||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.apache.maven.artifact;
|
|
||||||
|
|
||||||
import org.apache.maven.artifact.handler.manager.ArtifactHandlerManager;
|
|
||||||
import org.apache.maven.artifact.repository.ArtifactRepository;
|
|
||||||
import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout;
|
|
||||||
import org.codehaus.plexus.PlexusTestCase;
|
|
||||||
|
|
||||||
import java.io.File;
|
|
||||||
import java.io.FileWriter;
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.io.Writer;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author <a href="mailto:jason@maven.org">Jason van Zyl </a>
|
* @author <a href="mailto:jason@maven.org">Jason van Zyl </a>
|
||||||
|
@ -34,227 +23,11 @@ import java.util.List;
|
||||||
* jvanzyl Exp $
|
* jvanzyl Exp $
|
||||||
*/
|
*/
|
||||||
public abstract class NewLayoutArtifactComponentTestCase
|
public abstract class NewLayoutArtifactComponentTestCase
|
||||||
extends PlexusTestCase
|
extends ArtifactComponentTestCase
|
||||||
{
|
{
|
||||||
protected ArtifactHandlerManager artifactHandlerManager;
|
protected String getRepositoryLayout()
|
||||||
|
|
||||||
protected void setUp() throws Exception
|
|
||||||
{
|
{
|
||||||
super.setUp();
|
return "default";
|
||||||
|
|
||||||
artifactHandlerManager = (ArtifactHandlerManager) lookup( ArtifactHandlerManager.ROLE );
|
|
||||||
}
|
|
||||||
|
|
||||||
protected abstract String component();
|
|
||||||
|
|
||||||
/** Return an existing file, not a directory - causes creation to fail.
|
|
||||||
* @throws Exception*/
|
|
||||||
protected ArtifactRepository badLocalRepository() throws Exception
|
|
||||||
{
|
|
||||||
String path = "target/test-classes/repositories/" + component() + "/bad-local-repository";
|
|
||||||
|
|
||||||
File f = new File( getBasedir(), path );
|
|
||||||
|
|
||||||
f.createNewFile();
|
|
||||||
|
|
||||||
ArtifactRepositoryLayout repoLayout = (ArtifactRepositoryLayout) lookup( ArtifactRepositoryLayout.ROLE,
|
|
||||||
"default" );
|
|
||||||
|
|
||||||
ArtifactRepository localRepository = new ArtifactRepository( "test", "file://" + f.getPath(), repoLayout );
|
|
||||||
|
|
||||||
return localRepository;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected ArtifactRepository localRepository() throws Exception
|
|
||||||
{
|
|
||||||
String path = "target/test-classes/repositories/" + component() + "/local-repository";
|
|
||||||
|
|
||||||
File f = new File( getBasedir(), path );
|
|
||||||
|
|
||||||
ArtifactRepositoryLayout repoLayout = (ArtifactRepositoryLayout) lookup( ArtifactRepositoryLayout.ROLE,
|
|
||||||
"default" );
|
|
||||||
|
|
||||||
ArtifactRepository localRepository = new ArtifactRepository( "local", "file://" + f.getPath(), repoLayout );
|
|
||||||
|
|
||||||
return localRepository;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected ArtifactRepository remoteRepository() throws Exception
|
|
||||||
{
|
|
||||||
String path = "target/test-classes/repositories/" + component() + "/remote-repository";
|
|
||||||
|
|
||||||
File f = new File( getBasedir(), path );
|
|
||||||
|
|
||||||
ArtifactRepositoryLayout repoLayout = (ArtifactRepositoryLayout) lookup( ArtifactRepositoryLayout.ROLE,
|
|
||||||
"default" );
|
|
||||||
|
|
||||||
ArtifactRepository repository = new ArtifactRepository( "test", "file://" + f.getPath(), repoLayout );
|
|
||||||
|
|
||||||
return repository;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected ArtifactRepository badRemoteRepository() throws Exception
|
|
||||||
{
|
|
||||||
ArtifactRepositoryLayout repoLayout = (ArtifactRepositoryLayout) lookup( ArtifactRepositoryLayout.ROLE,
|
|
||||||
"default" );
|
|
||||||
|
|
||||||
ArtifactRepository repository = new ArtifactRepository( "test", "http://foo.bar/repository", repoLayout );
|
|
||||||
|
|
||||||
return repository;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected void assertRemoteArtifactPresent( Artifact artifact ) throws Exception
|
|
||||||
{
|
|
||||||
ArtifactRepository remoteRepo = remoteRepository();
|
|
||||||
|
|
||||||
String path = remoteRepo.pathOf( artifact );
|
|
||||||
|
|
||||||
File file = new File( remoteRepo.getBasedir(), path );
|
|
||||||
|
|
||||||
if ( !file.exists() )
|
|
||||||
{
|
|
||||||
fail( "Remote artifact " + file + " should be present." );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
protected void assertLocalArtifactPresent( Artifact artifact ) throws Exception
|
|
||||||
{
|
|
||||||
ArtifactRepository localRepo = localRepository();
|
|
||||||
|
|
||||||
String path = localRepo.pathOf( artifact );
|
|
||||||
|
|
||||||
File file = new File( localRepo.getBasedir(), path );
|
|
||||||
|
|
||||||
if ( !file.exists() )
|
|
||||||
{
|
|
||||||
fail( "Local artifact " + file + " should be present." );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
protected void assertRemoteArtifactNotPresent( Artifact artifact ) throws Exception
|
|
||||||
{
|
|
||||||
ArtifactRepository remoteRepo = remoteRepository();
|
|
||||||
|
|
||||||
String path = remoteRepo.pathOf( artifact );
|
|
||||||
|
|
||||||
File file = new File( remoteRepo.getBasedir(), path );
|
|
||||||
|
|
||||||
if ( file.exists() )
|
|
||||||
{
|
|
||||||
fail( "Remote artifact " + file + " should not be present." );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
protected void assertLocalArtifactNotPresent( Artifact artifact ) throws Exception
|
|
||||||
{
|
|
||||||
ArtifactRepository localRepo = localRepository();
|
|
||||||
|
|
||||||
String path = localRepo.pathOf( artifact );
|
|
||||||
|
|
||||||
File file = new File( localRepo.getBasedir(), path );
|
|
||||||
|
|
||||||
if ( file.exists() )
|
|
||||||
{
|
|
||||||
fail( "Local artifact " + file + " should not be present." );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// ----------------------------------------------------------------------
|
|
||||||
//
|
|
||||||
// ----------------------------------------------------------------------
|
|
||||||
|
|
||||||
protected List remoteRepositories() throws Exception
|
|
||||||
{
|
|
||||||
List remoteRepositories = new ArrayList();
|
|
||||||
|
|
||||||
remoteRepositories.add( remoteRepository() );
|
|
||||||
|
|
||||||
return remoteRepositories;
|
|
||||||
}
|
|
||||||
|
|
||||||
// ----------------------------------------------------------------------
|
|
||||||
// Test artifact generation for unit tests
|
|
||||||
// ----------------------------------------------------------------------
|
|
||||||
|
|
||||||
protected Artifact createLocalArtifact( String artifactId, String version ) throws Exception
|
|
||||||
{
|
|
||||||
Artifact artifact = createArtifact( artifactId, version );
|
|
||||||
|
|
||||||
createArtifact( artifact, localRepository() );
|
|
||||||
|
|
||||||
return artifact;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected Artifact createRemoteArtifact( String artifactId, String version ) throws Exception
|
|
||||||
{
|
|
||||||
Artifact artifact = createArtifact( artifactId, version );
|
|
||||||
|
|
||||||
createArtifact( artifact, remoteRepository() );
|
|
||||||
|
|
||||||
return artifact;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected void createLocalArtifact( Artifact artifact ) throws Exception
|
|
||||||
{
|
|
||||||
createArtifact( artifact, localRepository() );
|
|
||||||
}
|
|
||||||
|
|
||||||
protected void createRemoteArtifact( Artifact artifact ) throws Exception
|
|
||||||
{
|
|
||||||
createArtifact( artifact, remoteRepository() );
|
|
||||||
}
|
|
||||||
|
|
||||||
protected void createArtifact( Artifact artifact, ArtifactRepository repository ) throws Exception
|
|
||||||
{
|
|
||||||
String path = repository.pathOf( artifact );
|
|
||||||
|
|
||||||
File artifactFile = new File( repository.getBasedir(), path );
|
|
||||||
|
|
||||||
if ( !artifactFile.getParentFile().exists() )
|
|
||||||
{
|
|
||||||
artifactFile.getParentFile().mkdirs();
|
|
||||||
}
|
|
||||||
|
|
||||||
Writer writer = new FileWriter( artifactFile );
|
|
||||||
|
|
||||||
writer.write( artifact.getId() );
|
|
||||||
|
|
||||||
writer.close();
|
|
||||||
}
|
|
||||||
|
|
||||||
protected Artifact createArtifact( String artifactId, String version )
|
|
||||||
{
|
|
||||||
return createArtifact( artifactId, version, "jar" );
|
|
||||||
}
|
|
||||||
|
|
||||||
protected Artifact createArtifact( String artifactId, String version, String type )
|
|
||||||
{
|
|
||||||
return new DefaultArtifact( "org.apache.maven", artifactId, version, type );
|
|
||||||
}
|
|
||||||
|
|
||||||
protected Artifact createArtifact( String groupId, String artifactId, String version, String type )
|
|
||||||
{
|
|
||||||
return new DefaultArtifact( groupId, artifactId, version, Artifact.SCOPE_COMPILE, type, type );
|
|
||||||
}
|
|
||||||
|
|
||||||
protected void deleteLocalArtifact( Artifact artifact ) throws Exception
|
|
||||||
{
|
|
||||||
deleteArtifact( artifact, localRepository() );
|
|
||||||
}
|
|
||||||
|
|
||||||
protected void deleteArtifact( Artifact artifact, ArtifactRepository repository ) throws Exception
|
|
||||||
{
|
|
||||||
String path = repository.pathOf( artifact );
|
|
||||||
|
|
||||||
File artifactFile = new File( repository.getBasedir(), path );
|
|
||||||
|
|
||||||
if ( artifactFile.exists() )
|
|
||||||
{
|
|
||||||
if ( !artifactFile.delete() )
|
|
||||||
{
|
|
||||||
throw new IOException( "Failure while attempting to delete artifact " + artifactFile );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -27,6 +27,8 @@ import org.apache.maven.model.Model;
|
||||||
import org.apache.maven.model.io.xpp3.MavenXpp3Reader;
|
import org.apache.maven.model.io.xpp3.MavenXpp3Reader;
|
||||||
import org.apache.maven.project.MavenProject;
|
import org.apache.maven.project.MavenProject;
|
||||||
import org.apache.maven.project.MavenProjectBuilder;
|
import org.apache.maven.project.MavenProjectBuilder;
|
||||||
|
import org.apache.maven.project.ProjectBuildingException;
|
||||||
|
import org.apache.maven.wagon.util.IoUtils;
|
||||||
|
|
||||||
import java.io.FileReader;
|
import java.io.FileReader;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
@ -68,8 +70,6 @@ public class MavenMetadataSource
|
||||||
|
|
||||||
public Set retrieve( Artifact artifact, ArtifactRepository localRepository, List remoteRepositories )
|
public Set retrieve( Artifact artifact, ArtifactRepository localRepository, List remoteRepositories )
|
||||||
throws ArtifactMetadataRetrievalException
|
throws ArtifactMetadataRetrievalException
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
{
|
||||||
List dependencies = null;
|
List dependencies = null;
|
||||||
|
|
||||||
|
@ -90,35 +90,49 @@ public class MavenMetadataSource
|
||||||
artifact.getVersion(), artifact.getScope(),
|
artifact.getVersion(), artifact.getScope(),
|
||||||
"pom", null );
|
"pom", null );
|
||||||
|
|
||||||
artifactResolver.resolve( metadataArtifact, remoteRepositories, localRepository );
|
|
||||||
|
|
||||||
// [jdcasey/03-Feb-2005]: Replacing with ProjectBuilder, to enable
|
|
||||||
// post-processing and inheritance calculation before retrieving the
|
|
||||||
// associated artifacts. This should improve consistency.
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
if ( mavenProjectBuilder != null )
|
metadataArtifact = artifactResolver.resolve( metadataArtifact, remoteRepositories, localRepository );
|
||||||
{
|
|
||||||
MavenProject p = mavenProjectBuilder.buildFromRepository( metadataArtifact, localRepository );
|
|
||||||
dependencies = p.getDependencies();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Model model = reader.read( new FileReader( metadataArtifact.getFile() ) );
|
|
||||||
dependencies = model.getDependencies();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch ( Exception e )
|
|
||||||
{
|
|
||||||
throw new ArtifactMetadataRetrievalException(
|
|
||||||
"Cannot read artifact source: " + metadataArtifact.getPath(), e );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return artifactFactory.createArtifacts( dependencies, localRepository, artifact.getScope() );
|
|
||||||
}
|
}
|
||||||
catch ( ArtifactResolutionException e )
|
catch ( ArtifactResolutionException e )
|
||||||
{
|
{
|
||||||
throw new ArtifactMetadataRetrievalException( "Error while resolving metadata artifact", e );
|
throw new ArtifactMetadataRetrievalException( "Error while resolving metadata artifact", e );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// [jdcasey/03-Feb-2005]: Replacing with ProjectBuilder, to enable
|
||||||
|
// post-processing and inheritance calculation before retrieving the
|
||||||
|
// associated artifacts. This should improve consistency.
|
||||||
|
if ( mavenProjectBuilder != null )
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
MavenProject p = mavenProjectBuilder.buildFromRepository( metadataArtifact, localRepository );
|
||||||
|
dependencies = p.getDependencies();
|
||||||
|
}
|
||||||
|
catch ( ProjectBuildingException e )
|
||||||
|
{
|
||||||
|
throw new ArtifactMetadataRetrievalException( "Unable to read the metadata file", e );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
FileReader reader = null;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
reader = new FileReader( metadataArtifact.getFile() );
|
||||||
|
Model model = this.reader.read( reader );
|
||||||
|
dependencies = model.getDependencies();
|
||||||
|
}
|
||||||
|
catch ( Exception e )
|
||||||
|
{
|
||||||
|
throw new ArtifactMetadataRetrievalException( "Unable to read the metadata file", e );
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
IoUtils.close( reader );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return artifactFactory.createArtifacts( dependencies, localRepository, artifact.getScope() );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -267,8 +267,9 @@ public class DefaultPluginManager
|
||||||
|
|
||||||
artifactFactory = (ArtifactFactory) container.lookup( ArtifactFactory.ROLE );
|
artifactFactory = (ArtifactFactory) container.lookup( ArtifactFactory.ROLE );
|
||||||
|
|
||||||
Artifact pluginArtifact = artifactFactory.createArtifact( AbstractPlugin.getDefaultPluginGroupId(), artifactId,
|
Artifact pluginArtifact = artifactFactory.createArtifact( AbstractPlugin.getDefaultPluginGroupId(),
|
||||||
version, null, MAVEN_PLUGIN, null );
|
artifactId, version, null, MAVEN_PLUGIN,
|
||||||
|
null );
|
||||||
|
|
||||||
addPlugin( pluginArtifact, session );
|
addPlugin( pluginArtifact, session );
|
||||||
}
|
}
|
||||||
|
@ -774,6 +775,7 @@ public class DefaultPluginManager
|
||||||
{
|
{
|
||||||
Artifact artifact = (Artifact) it.next();
|
Artifact artifact = (Artifact) it.next();
|
||||||
|
|
||||||
|
// TODO: should I get the modified artifacts back into the project?
|
||||||
artifactResolver.resolve( artifact, context.getRemoteRepositories(), context.getLocalRepository() );
|
artifactResolver.resolve( artifact, context.getRemoteRepositories(), context.getLocalRepository() );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -459,7 +459,7 @@ public class DefaultMavenProjectBuilder
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
artifactResolver.resolve( artifact, remoteArtifactRepositories, localRepository );
|
artifact = artifactResolver.resolve( artifact, remoteArtifactRepositories, localRepository );
|
||||||
}
|
}
|
||||||
catch ( ArtifactResolutionException e )
|
catch ( ArtifactResolutionException e )
|
||||||
{
|
{
|
||||||
|
|
|
@ -235,7 +235,8 @@ public class MavenProject
|
||||||
// TODO: let the scope handler deal with this
|
// TODO: let the scope handler deal with this
|
||||||
if ( Artifact.SCOPE_COMPILE.equals( a.getScope() ) )
|
if ( Artifact.SCOPE_COMPILE.equals( a.getScope() ) )
|
||||||
{
|
{
|
||||||
list.add( a.getPath() );
|
// TODO: this assumes resolution, which may not have been the case - improve error reporting in that instance
|
||||||
|
list.add( a.getFile().getPath() );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return list;
|
return list;
|
||||||
|
@ -257,7 +258,8 @@ public class MavenProject
|
||||||
if ( Artifact.SCOPE_TEST.equals( a.getScope() ) || Artifact.SCOPE_COMPILE.equals( a.getScope() ) ||
|
if ( Artifact.SCOPE_TEST.equals( a.getScope() ) || Artifact.SCOPE_COMPILE.equals( a.getScope() ) ||
|
||||||
Artifact.SCOPE_RUNTIME.equals( a.getScope() ) )
|
Artifact.SCOPE_RUNTIME.equals( a.getScope() ) )
|
||||||
{
|
{
|
||||||
list.add( a.getPath() );
|
// TODO: this assumes resolution, which may not have been the case - improve error reporting in that instance
|
||||||
|
list.add( a.getFile().getPath() );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -279,7 +281,8 @@ public class MavenProject
|
||||||
// TODO: let the scope handler deal with this
|
// TODO: let the scope handler deal with this
|
||||||
if ( Artifact.SCOPE_COMPILE.equals( a.getScope() ) || Artifact.SCOPE_RUNTIME.equals( a.getScope() ) )
|
if ( Artifact.SCOPE_COMPILE.equals( a.getScope() ) || Artifact.SCOPE_RUNTIME.equals( a.getScope() ) )
|
||||||
{
|
{
|
||||||
list.add( a.getPath() );
|
// TODO: this assumes resolution, which may not have been the case - improve error reporting in that instance
|
||||||
|
list.add( a.getFile().getPath() );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue