Sometimes, network quality from building machine to the remote repository is not perfect. Of course, improving the network would be the best solution, but it is not always possible.
There are a few strategies to work around the network issue.
Deploy plugin provides retryFailedDeploymentCount parameter to retry deployment multiple times before giving up and returning a failure for the deploy goal:
<project> [...] <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-deploy-plugin</artifactId> <configuration> <retryFailedDeploymentCount>3</retryFailedDeploymentCount> <configuration> </plugin> </plugins> </build> [...] </project>
When the network is really not consistent, a deeper strategy is to deploy in 2 steps:
1. deploy to a local directory during the build, for example file:./target/staging-deploy,
2. then copy from the local area to the target remote repository, retrying as much as necessary.
Deploying to a local directory can be done from command line, without changing POM, using altDeploymentRepository parameter:
mvn deploy -DaltDeploymentRepository=local::file:./target/staging-deploy
or for older 2.x version of maven-deploy-plugin
mvn deploy -DaltDeploymentRepository=local::default::file:./target/staging-deploy
Of course, you can configure the repository in your pom.xml if you want to go from a temporary strategy to the general strategy.
wagon-maven-plugin's merge-maven-repos goal provides a mechanism to copy from one remote repository to the other, while merging repository metadata.
wagon-maven-plugin's upload goal will do the same without taking care of repository metadata: use it if you have an empty repository as target, like a staging repository provided by a repository manager.
It can be invoked fully from command line (renaming -Dwagon. with wagon.targetId when Wagon Maven Plugin 2.0.1 will be released):
mvn org.codehaus.mojo:wagon-maven-plugin:2.0.0:merge-maven-repos \ -Dwagon.source=file:./target/staging-deploy \ -Dwagon.target=https://... \ -Dwagon.=id # or once wagon-maven-plugin 2.0.1 is released: -Dwagon.targetId=id
or more simply with mvn wagon:merge-maven-repos with configuration in pom.xml:
<project> [...] <build> <plugins> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>wagon-maven-plugin</artifactId> <version>2.0.0</version> <configuration> <source>file:./target/staging-deploy</source> <target>${project.distributionManagement.repository.url}</target> <targetId>${project.distributionManagement.repository.id}</targetId> </configuration> </plugin> </plugins> </build> [...] </project>