You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by be...@apache.org on 2010/04/01 16:16:03 UTC
svn commit: r929985 - in /maven/maven-3/trunk:
maven-compat/src/main/java/org/apache/maven/repository/legacy/
maven-compat/src/test/java/org/apache/maven/repository/legacy/
maven-core/src/main/java/org/apache/maven/project/artifact/
Author: bentmann
Date: Thu Apr 1 14:16:03 2010
New Revision: 929985
URL: http://svn.apache.org/viewvc?rev=929985&view=rev
Log:
[MNG-3470] Build does not fail on corrupted POM even with checksumPolicy=fail
Modified:
maven/maven-3/trunk/maven-compat/src/main/java/org/apache/maven/repository/legacy/DefaultUpdateCheckManager.java
maven/maven-3/trunk/maven-compat/src/main/java/org/apache/maven/repository/legacy/DefaultWagonManager.java
maven/maven-3/trunk/maven-compat/src/main/java/org/apache/maven/repository/legacy/UpdateCheckManager.java
maven/maven-3/trunk/maven-compat/src/test/java/org/apache/maven/repository/legacy/DefaultUpdateCheckManagerTest.java
maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/project/artifact/MavenMetadataSource.java
Modified: maven/maven-3/trunk/maven-compat/src/main/java/org/apache/maven/repository/legacy/DefaultUpdateCheckManager.java
URL: http://svn.apache.org/viewvc/maven/maven-3/trunk/maven-compat/src/main/java/org/apache/maven/repository/legacy/DefaultUpdateCheckManager.java?rev=929985&r1=929984&r2=929985&view=diff
==============================================================================
--- maven/maven-3/trunk/maven-compat/src/main/java/org/apache/maven/repository/legacy/DefaultUpdateCheckManager.java (original)
+++ maven/maven-3/trunk/maven-compat/src/main/java/org/apache/maven/repository/legacy/DefaultUpdateCheckManager.java Thu Apr 1 14:16:03 2010
@@ -36,6 +36,7 @@ import org.apache.maven.artifact.reposit
import org.apache.maven.artifact.repository.ArtifactRepositoryPolicy;
import org.apache.maven.artifact.repository.Authentication;
import org.apache.maven.artifact.repository.metadata.RepositoryMetadata;
+import org.apache.maven.repository.Proxy;
import org.codehaus.plexus.component.annotations.Component;
import org.codehaus.plexus.logging.AbstractLogEnabled;
import org.codehaus.plexus.logging.Logger;
@@ -45,6 +46,9 @@ public class DefaultUpdateCheckManager
extends AbstractLogEnabled
implements UpdateCheckManager
{
+
+ private static final String ERROR_KEY_SUFFIX = ".error";
+
public DefaultUpdateCheckManager()
{
@@ -154,7 +158,13 @@ public class DefaultUpdateCheckManager
return readLastUpdated( touchfile, key );
}
- public void touch( Artifact artifact, ArtifactRepository repository )
+ public String getError( Artifact artifact, ArtifactRepository repository )
+ {
+ File touchFile = getTouchfile( artifact );
+ return getError( touchFile, getRepositoryKey( repository ) );
+ }
+
+ public void touch( Artifact artifact, ArtifactRepository repository, String error )
{
File file = artifact.getFile();
@@ -166,7 +176,7 @@ public class DefaultUpdateCheckManager
}
else
{
- writeLastUpdated( touchfile, getRepositoryKey( repository ) );
+ writeLastUpdated( touchfile, getRepositoryKey( repository ), error );
}
}
@@ -176,7 +186,7 @@ public class DefaultUpdateCheckManager
String key = getMetadataKey( repository, file );
- writeLastUpdated( touchfile, key );
+ writeLastUpdated( touchfile, key, null );
}
String getMetadataKey( ArtifactRepository repository, File file )
@@ -188,6 +198,17 @@ public class DefaultUpdateCheckManager
{
StringBuilder buffer = new StringBuilder( 256 );
+ Proxy proxy = repository.getProxy();
+ if ( proxy != null )
+ {
+ if ( proxy.getUserName() != null )
+ {
+ int hash = ( proxy.getUserName() + proxy.getPassword() ).hashCode();
+ buffer.append( hash ).append( '@' );
+ }
+ buffer.append( proxy.getHost() ).append( ':' ).append( proxy.getPort() ).append( '>' );
+ }
+
// consider the username&password because a repo manager might block artifacts depending on authorization
Authentication auth = repository.getAuthentication();
if ( auth != null )
@@ -202,7 +223,7 @@ public class DefaultUpdateCheckManager
return buffer.toString();
}
- private void writeLastUpdated( File touchfile, String key )
+ private void writeLastUpdated( File touchfile, String key, String error )
{
synchronized ( touchfile.getAbsolutePath().intern() )
{
@@ -236,6 +257,15 @@ public class DefaultUpdateCheckManager
props.setProperty( key, Long.toString( System.currentTimeMillis() ) );
+ if ( error != null )
+ {
+ props.setProperty( key + ERROR_KEY_SUFFIX, error );
+ }
+ else
+ {
+ props.remove( key + ERROR_KEY_SUFFIX );
+ }
+
ByteArrayOutputStream stream = new ByteArrayOutputStream();
getLogger().debug( "Writing resolution-state to: " + touchfile );
@@ -285,19 +315,49 @@ public class DefaultUpdateCheckManager
}
}
- public Date readLastUpdated( File touchfile, String key )
+ Date readLastUpdated( File touchfile, String key )
+ {
+ getLogger().debug( "Searching for " + key + " in resolution tracking file." );
+
+ Properties props = read( touchfile );
+ if ( props != null )
+ {
+ String rawVal = props.getProperty( key );
+ if ( rawVal != null )
+ {
+ try
+ {
+ return new Date( Long.parseLong( rawVal ) );
+ }
+ catch ( NumberFormatException e )
+ {
+ getLogger().debug( "Cannot parse lastUpdated date: \'" + rawVal + "\'. Ignoring.", e );
+ }
+ }
+ }
+ return null;
+ }
+
+ private String getError( File touchFile, String key )
+ {
+ Properties props = read( touchFile );
+ if ( props != null )
+ {
+ return props.getProperty( key + ERROR_KEY_SUFFIX );
+ }
+ return null;
+ }
+
+ private Properties read( File touchfile )
{
if ( !touchfile.canRead() )
{
- getLogger().debug( "Skipped unreadable touchfile " + touchfile + " for key " + key );
+ getLogger().debug( "Skipped unreadable resolution tracking file " + touchfile );
return null;
}
synchronized ( touchfile.getAbsolutePath().intern() )
{
- getLogger().debug( "Searching for: " + key + " in touchfile." );
-
- Date result = null;
FileInputStream stream = null;
FileLock lock = null;
FileChannel channel = null;
@@ -312,24 +372,13 @@ public class DefaultUpdateCheckManager
getLogger().debug( "Reading resolution-state from: " + touchfile );
props.load( stream );
- String rawVal = props.getProperty( key );
- if ( rawVal != null )
- {
- try
- {
- result = new Date( Long.parseLong( rawVal ) );
- }
- catch ( NumberFormatException e )
- {
- getLogger().debug( "Cannot parse lastUpdated date: \'" + rawVal + "\'. Ignoring.", e );
- result = null;
- }
- }
+ return props;
}
catch ( IOException e )
{
- getLogger().debug( "Failed to read lastUpdated information.\nFile: "
- + touchfile.toString() + "; key: " + key, e );
+ getLogger().debug( "Failed to read resolution tracking file " + touchfile, e );
+
+ return null;
}
finally
{
@@ -341,8 +390,7 @@ public class DefaultUpdateCheckManager
}
catch ( IOException e )
{
- getLogger().debug( "Error releasing shared lock for resolution tracking file: "
- + touchfile, e );
+ getLogger().debug( "Error releasing shared lock for resolution tracking file: " + touchfile, e );
}
}
@@ -354,13 +402,10 @@ public class DefaultUpdateCheckManager
}
catch ( IOException e )
{
- getLogger().debug( "Error closing FileChannel for resolution tracking file: "
- + touchfile, e );
+ getLogger().debug( "Error closing FileChannel for resolution tracking file: " + touchfile, e );
}
}
}
-
- return result;
}
}
Modified: maven/maven-3/trunk/maven-compat/src/main/java/org/apache/maven/repository/legacy/DefaultWagonManager.java
URL: http://svn.apache.org/viewvc/maven/maven-3/trunk/maven-compat/src/main/java/org/apache/maven/repository/legacy/DefaultWagonManager.java?rev=929985&r1=929984&r2=929985&view=diff
==============================================================================
--- maven/maven-3/trunk/maven-compat/src/main/java/org/apache/maven/repository/legacy/DefaultWagonManager.java (original)
+++ maven/maven-3/trunk/maven-compat/src/main/java/org/apache/maven/repository/legacy/DefaultWagonManager.java Thu Apr 1 14:16:03 2010
@@ -98,10 +98,19 @@ public class DefaultWagonManager
{
getRemoteFile( repository, artifact.getFile(), remotePath, downloadMonitor,
policy.getChecksumPolicy(), false );
+
+ updateCheckManager.touch( artifact, repository, null );
}
- finally
+ catch ( ResourceDoesNotExistException e )
{
- updateCheckManager.touch( artifact, repository );
+ updateCheckManager.touch( artifact, repository, null );
+ throw e;
+ }
+ catch ( TransferFailedException e )
+ {
+ String error = ( e.getMessage() != null ) ? e.getMessage() : e.getClass().getSimpleName();
+ updateCheckManager.touch( artifact, repository, error );
+ throw e;
}
logger.debug( " Artifact " + artifact.getId() + " resolved to " + artifact.getFile() );
@@ -110,10 +119,21 @@ public class DefaultWagonManager
}
else if ( !artifact.getFile().exists() )
{
- throw new ResourceDoesNotExistException( "Failure to resolve " + remotePath + " from "
- + repository.getUrl() + " was cached in the local repository. "
- + "Resolution will not be reattempted until the update interval of " + repository.getId()
- + " has elapsed or updates are forced." );
+ String error = updateCheckManager.getError( artifact, repository );
+ if ( error != null )
+ {
+ throw new TransferFailedException( "Failure to resolve " + remotePath + " from "
+ + repository.getUrl() + " was cached in the local repository. "
+ + "Resolution will not be reattempted until the update interval of " + repository.getId()
+ + " has elapsed or updates are forced. Original error: " + error );
+ }
+ else
+ {
+ throw new ResourceDoesNotExistException( "Failure to resolve " + remotePath + " from "
+ + repository.getUrl() + " was cached in the local repository. "
+ + "Resolution will not be reattempted until the update interval of " + repository.getId()
+ + " has elapsed or updates are forced." );
+ }
}
}
}
Modified: maven/maven-3/trunk/maven-compat/src/main/java/org/apache/maven/repository/legacy/UpdateCheckManager.java
URL: http://svn.apache.org/viewvc/maven/maven-3/trunk/maven-compat/src/main/java/org/apache/maven/repository/legacy/UpdateCheckManager.java?rev=929985&r1=929984&r2=929985&view=diff
==============================================================================
--- maven/maven-3/trunk/maven-compat/src/main/java/org/apache/maven/repository/legacy/UpdateCheckManager.java (original)
+++ maven/maven-3/trunk/maven-compat/src/main/java/org/apache/maven/repository/legacy/UpdateCheckManager.java Thu Apr 1 14:16:03 2010
@@ -30,7 +30,9 @@ public interface UpdateCheckManager
boolean isUpdateRequired( Artifact artifact, ArtifactRepository repository );
- void touch( Artifact artifact, ArtifactRepository repository );
+ void touch( Artifact artifact, ArtifactRepository repository, String error );
+
+ String getError( Artifact artifact, ArtifactRepository repository );
boolean isUpdateRequired( RepositoryMetadata metadata, ArtifactRepository repository, File file );
Modified: maven/maven-3/trunk/maven-compat/src/test/java/org/apache/maven/repository/legacy/DefaultUpdateCheckManagerTest.java
URL: http://svn.apache.org/viewvc/maven/maven-3/trunk/maven-compat/src/test/java/org/apache/maven/repository/legacy/DefaultUpdateCheckManagerTest.java?rev=929985&r1=929984&r2=929985&view=diff
==============================================================================
--- maven/maven-3/trunk/maven-compat/src/test/java/org/apache/maven/repository/legacy/DefaultUpdateCheckManagerTest.java (original)
+++ maven/maven-3/trunk/maven-compat/src/test/java/org/apache/maven/repository/legacy/DefaultUpdateCheckManagerTest.java Thu Apr 1 14:16:03 2010
@@ -71,7 +71,7 @@ public class DefaultUpdateCheckManagerTe
file.getParentFile().mkdirs();
file.createNewFile();
- updateCheckManager.touch( a, remoteRepository );
+ updateCheckManager.touch( a, remoteRepository, null );
assertFalse( updateCheckManager.isUpdateRequired( a, remoteRepository ) );
@@ -99,7 +99,7 @@ public class DefaultUpdateCheckManagerTe
assertTrue( updateCheckManager.isUpdateRequired( a, remoteRepository ) );
- updateCheckManager.touch( a, remoteRepository );
+ updateCheckManager.touch( a, remoteRepository, null );
assertFalse( updateCheckManager.isUpdateRequired( a, remoteRepository ) );
@@ -127,7 +127,7 @@ public class DefaultUpdateCheckManagerTe
file.getParentFile().mkdirs();
file.createNewFile();
- updateCheckManager.touch( a, remoteRepository );
+ updateCheckManager.touch( a, remoteRepository, null );
assertFalse( updateCheckManager.isUpdateRequired( a, remoteRepository ) );
@@ -155,7 +155,7 @@ public class DefaultUpdateCheckManagerTe
assertTrue( updateCheckManager.isUpdateRequired( a, remoteRepository ) );
- updateCheckManager.touch( a, remoteRepository );
+ updateCheckManager.touch( a, remoteRepository, null );
assertFalse( updateCheckManager.isUpdateRequired( a, remoteRepository ) );
Modified: maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/project/artifact/MavenMetadataSource.java
URL: http://svn.apache.org/viewvc/maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/project/artifact/MavenMetadataSource.java?rev=929985&r1=929984&r2=929985&view=diff
==============================================================================
--- maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/project/artifact/MavenMetadataSource.java (original)
+++ maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/project/artifact/MavenMetadataSource.java Thu Apr 1 14:16:03 2010
@@ -41,6 +41,7 @@ import org.apache.maven.artifact.reposit
import org.apache.maven.artifact.repository.metadata.RepositoryMetadataManager;
import org.apache.maven.artifact.repository.metadata.RepositoryMetadataResolutionException;
import org.apache.maven.artifact.resolver.ArtifactResolutionException;
+import org.apache.maven.artifact.resolver.MultipleArtifactsNotFoundException;
import org.apache.maven.artifact.resolver.filter.AndArtifactFilter;
import org.apache.maven.artifact.resolver.filter.ArtifactFilter;
import org.apache.maven.artifact.resolver.filter.ExcludesArtifactFilter;
@@ -587,11 +588,16 @@ public class MavenMetadataSource
String message;
- // missing/incompatible POM (e.g. a Maven 1 POM)
- if ( isMissingPom( e ) )
+ if ( e.getCause() instanceof MultipleArtifactsNotFoundException )
{
message = "Missing POM for " + relocatedArtifact.getId();
}
+ else if ( e.getCause() instanceof ArtifactResolutionException )
+ {
+ throw new ArtifactMetadataRetrievalException( "Failed to retrieve POM for "
+ + relocatedArtifact.getId() + ": " + e.getCause().getMessage(), e.getCause(),
+ relocatedArtifact );
+ }
else
{
message =
@@ -705,11 +711,6 @@ public class MavenMetadataSource
return rel;
}
- private boolean isMissingPom( ProjectBuildingException e )
- {
- return e.getCause() instanceof ArtifactResolutionException;
- }
-
private ModelProblem hasMissingParentPom( ProjectBuildingException e )
{
if ( e.getCause() instanceof ModelBuildingException )