diff --git a/maven-artifact-transfer/src/main/java/org/apache/maven/shared/project/deploy/ProjectDeployerRequest.java b/maven-artifact-transfer/src/main/java/org/apache/maven/shared/project/deploy/ProjectDeployerRequest.java index 0f93d5b44..b63a1b33c 100644 --- a/maven-artifact-transfer/src/main/java/org/apache/maven/shared/project/deploy/ProjectDeployerRequest.java +++ b/maven-artifact-transfer/src/main/java/org/apache/maven/shared/project/deploy/ProjectDeployerRequest.java @@ -34,6 +34,8 @@ public class ProjectDeployerRequest private int retryFailedDeploymentCount; + private int retryFailedDeploymentDelay; + // From DeployMojo private MavenProject project; @@ -78,6 +80,23 @@ public ProjectDeployerRequest setRetryFailedDeploymentCount( int retryFailedDepl return this; } + /** + * @return the retryFailedDeploymentCount + */ + public int getRetryFailedDeploymentDelay() + { + return retryFailedDeploymentDelay; + } + + /** + * @param retryFailedDeploymentDelay the retryFailedDeploymentDelay to set + */ + public ProjectDeployerRequest setRetryFailedDeploymentDelay( int retryFailedDeploymentDelay ) + { + this.retryFailedDeploymentDelay = retryFailedDeploymentDelay; + return this; + } + /** * @return the project */ diff --git a/maven-artifact-transfer/src/main/java/org/apache/maven/shared/project/deploy/internal/DefaultProjectDeployer.java b/maven-artifact-transfer/src/main/java/org/apache/maven/shared/project/deploy/internal/DefaultProjectDeployer.java index bac0e9b9d..af4c9e4aa 100644 --- a/maven-artifact-transfer/src/main/java/org/apache/maven/shared/project/deploy/internal/DefaultProjectDeployer.java +++ b/maven-artifact-transfer/src/main/java/org/apache/maven/shared/project/deploy/internal/DefaultProjectDeployer.java @@ -51,6 +51,7 @@ public class DefaultProjectDeployer implements ProjectDeployer { private static final Logger LOGGER = LoggerFactory.getLogger( DefaultProjectDeployer.class ); + private static final int MAX_RETRY_DELAY = 300; // seconds @Requirement private ArtifactDeployer deployer; @@ -95,6 +96,7 @@ public void deploy( ProjectBuildingRequest buildingRequest, ProjectDeployerReque artifact.setRepository( artifactRepository ); int retryFailedDeploymentCount = request.getRetryFailedDeploymentCount(); + int retryFailedDeploymentDelay = request.getRetryFailedDeploymentDelay(); try { @@ -141,7 +143,8 @@ else if ( !attachedArtifacts.isEmpty() ) deployableArtifacts.add( attached ); } - deploy( buildingRequest, deployableArtifacts, artifactRepository, retryFailedDeploymentCount ); + deploy( buildingRequest, deployableArtifacts, artifactRepository, retryFailedDeploymentCount, + retryFailedDeploymentDelay ); } catch ( ArtifactDeployerException e ) { @@ -150,12 +153,14 @@ else if ( !attachedArtifacts.isEmpty() ) } private void deploy( ProjectBuildingRequest request, Collection artifacts, - ArtifactRepository deploymentRepository, int retryFailedDeploymentCount ) + ArtifactRepository deploymentRepository, int retryFailedDeploymentCount, + int retryFailedDeploymentDelay ) throws ArtifactDeployerException { // for now retry means redeploy the complete artifacts collection int retryFailedDeploymentCounter = Math.max( 1, Math.min( 10, retryFailedDeploymentCount ) ); + int retryDelay = Math.max( 1, Math.min( MAX_RETRY_DELAY, retryFailedDeploymentDelay ) ); ArtifactDeployerException exception = null; for ( int count = 0; count < retryFailedDeploymentCounter; count++ ) { @@ -177,6 +182,15 @@ private void deploy( ProjectBuildingRequest request, Collection artifa { LOGGER.warn( "Encountered issue during deployment: " + e.getLocalizedMessage() ); LOGGER.debug( e.getMessage() ); + try + { + LOGGER.warn( "retrying in " + retryDelay + " seconds." ); + Thread.sleep( retryDelay * 1000L ); + } + catch ( InterruptedException e1 ) + { + // ignored + } } if ( exception == null ) {